內部類的一些知識

2021-08-29 13:35:22 字數 2740 閱讀 7705

小弟最近學習內部類總結了下面一些內容,參考了一些資料,不足之處請指出,謝謝!

成員內部類:

相當於類的非靜態成員,可以用許可權修飾符來修飾,包括private、protected、public.

1、定義成員內部類

class outter

//外部類的普通成員

int j = 0;

}2、外部類之內置立成員內部類物件

語法和普通的建立物件相同,用new操作符呼叫相應的構造方法即可。注意的是,非靜態內部類屬於外部類的非靜態成員,不能在靜態上下文使用。

例子:class outter

}//外部類的普通成員

int j = 0;

public void test()

}3、外部類之外建立成員內部類物件

既然是外部類的非靜態成員,就必須在外部類物件存在的情況下使用。

基本語法是

《外部類類名》.《內部類類名》 引用變數名稱 = 《外部類物件的引用》.new 《內部類構造器》;

《外部類類名》.《內部類類名》 引用變數名稱 = new 《外部類構造器》.new 《內部類構造器》;

(1)、建立內部類物件時物件引用必須是《外部類類名》.《內部類類名》

(2)、呼叫內部類的構造方法不能直接用new 而是要用《外部類物件的引用》.new呼叫

例子:class outter

}//外部類的普通成員

int j = 0;

}class maintest

}在外部類之外訪問內部類時需要注意許可權修飾符的限制,這點和類成員一樣。

3、內部類編譯後生成的.class檔名稱格式是《外部類類名》$《內部類類名》。

4、內部類與外部類之間的成員互相訪問

內部類可以訪問外部類的任何成員,包括private成員。

外部類訪問內部類的成員需要建立內部類的物件,之後可以訪問內部類的任何成員,包括private成員,需要注意的是成員內部類不可以有靜態成員。

當外部類的成員和內部類的成員重名時單單用this是區分不了的。在內部類中訪問外部類的成員時可以用如下語法區分

《外部類類名》.this.《外部類中需要被訪問的成員名》;

區域性內部類

內部類定義在方法中成為區域性內部類,只在區域性有效。該類只為所在的方法塊服務。

區域性內部類和成員內部類一樣可以訪問外圍類的所有成員,但是不可以訪問同在乙個區域性塊的普通區域性變數。如果要訪問,此區域性變數要被宣告稱final的。

**塊結束後普通的區域性變數會消亡,而建立的區域性內部類物件並不會隨著語句塊的結束而消亡。final的區域性變數的儲存方式和普通的區域性變數不同,其不會因為語句塊的結束而消失,還會長期存在,因此可以被區域性內部類訪問。

例子:public class innerclasstest1

}class outter

}forinner = new inner();

return forinner;} }

inte***ce forinner

由於區域性內部類只在區域性有效,所以不能在外面用區域性內部類的引用指向區域性內部類的物件,只能用區域性內部類實現介面並建立區域性內部類物件,在外面用介面引用指向區域性內部類物件。

靜態方法中的區域性內部類只能訪問外圍類的靜態成員,訪問不了非靜態成員。

區域性內部類生成的.class檔名稱是《外部類類名》$《內部類類名》其中n是該區域性的第幾個內部類

靜態內部類

靜態內部類的定義

class outter

}由於靜態內部類是外部類的靜態成員,所以靜態內部類只能訪問外部類的靜態成員。並且建立靜態內部類的物件不依賴外部類的物件。在外部類之外建立靜態內部類物件的語法如下

《外部類類名》.《內部類類名》 引用變數名 = new 《外部類類名》.《內部類構造器》;

例子:class outter

}public void getinner()

}public class maintest

}靜態內部類實際上已經脫離了外部類的控制,建立物件時也不再需要外部類物件的存在,實質上只是乙個放置在別的類中的普通類而已。

匿名內部類

基於繼承的匿名內部類,語法如下:

new 《匿名內部類要繼承父類的對應構造器》 ;

基於實現介面的匿名內部類,語法如下:

new 《介面名》

匿名內部類中使用外面的變數要被宣告成final的。

匿名內部類物件初始化的**可以寫在其非靜態塊中

匿名內部類生成的.class檔案是《外部類類名》$.class n是該類的第幾個匿名內部類。

各種內部類可用的修飾符

成員內部類

final、abstract、public、private、protected、static

靜態內部類

final、abstract、public、private、protected

區域性內部類

final、abstract

匿名內部類

不能對匿名內部類使用修飾符

內部介面

定義在類中的內部介面無論是否被static修飾都是靜態成員。

內部介面宣告成private的意味著只能被外部類中的某個內部類來實現。

內部介面不能扮演區域性的角色,否則編譯報錯。因為介面的設計初衷是對外公布,讓很多類實現,而區域性的角色違背了介面的設計初衷。

介面中的內部介面屬於介面的成員,具有介面成員的所有屬性,不能用private進行修飾。

外部介面外實現內部介面的語法如下:

class 《類名》 implements 《外部介面名》.《內部介面名》

java 內部類 自己的一些理解

注意 內部類相同於 外部類的乙個屬性 和 外部類的其他屬性 是同級的 只不過訪問的方式不同 內部類私有的方法肯定也能被外部類訪問 內部類可以訪問外部類的任意變數和方法 除了靜態內部類 靜態方法裡面 只能訪問 靜態變數和靜態方法 定義在自己方法裡面的區域性變數 內部類中只有靜態內部類才能定義 靜態成員...

內部類知識總結

1.內部類定義 可以將乙個類的定義放在另乙個類或者介面的定義內部.2.內部類分類 3.內部類與外部類的通訊 3.1 對於平凡的內部類 形如class outter void g class inner 從inner類內部可訪問outter類的任何域和方法.通常平凡的內部類儲存了乙個對外部類的物件的引...

內部類 內部類的訪問 匿名內部類

內部類 將乙個類定義在另乙個類的裡面,對立面那個類就成為內部類 內建類,巢狀類 定義 當描述事物時,事物的內部還有事物,該事物用內部類來描述。因為內部事務在使用外部事物的內容。舉例子心臟 內部類的訪問規則 1內部類可以直接訪問外部類中的成員,包括私有。之所以可以直接訪問外部類的成員 因為內部類中持有...