内部類
一般情況下:我們把類定義成獨立的單元。有些情況下,我們把一個類放在另一個類的内部定義,稱為内部類。
内部類的作用:
1.内部類提供了更好的封裝,隻能讓外部類直接通路,不允許同一個包中的其他類直接通路。
2.内部類可以直接通路外部類的私有屬性,内部類被當成其外部類的成員。但外部類不能通路内部類的内部屬性。
内部類的使用場合:
由于内部類提供了更好的封裝特性,并且可以很友善的通路外部類的屬性,是以,通常内部類在隻為所在外部類提供服務的情況下優先使用。
内部類的分類:
1.成員内部類(可以使用private、protected、public 任意進行修飾。并且在class檔案儲存中,檔案名為"外部類$内部類.class")
a)非靜态内部類(外部類使用非靜态内部類和平時使用其他類沒什麼不同)
i.非靜态内部類必須寄存在一個外部類對象裡。是以,如果有一個非靜态内部類對象那麼一定存在對應的外部類對象。非靜态内部類對象單獨屬于某個對象。
ii.非靜态内部類可以使用外部類的成員,但是外部類不能直接通路非靜态内部類成員。
iii.非靜态内部類不能有靜态方法,靜态屬性,靜态初始化塊。
iV.靜态成員不能通路非靜态成員,外部類的靜态方法,靜态代碼塊不能通路非靜态内部類,包括不能使用非靜态内部類定義變量,建立執行個體。
V.内部類的通路: 1.外部類中定義内部類:new InnerClass()
2.外部類以外的地方使用非靜态内部類:
Outer.Inner varname=OuterObject.new Inner();
b).靜态内部類
i.當一個靜态内部類對象存在,并不一定存在對應的外部類對象。是以,靜态内部類的執行個體方法不能直接通路外部類的執行個體方法。
ii.靜态内部類看作外部類的一個靜态成員。是以,外部類的方法中可以通過;靜态内部類.名字 通路靜态内部類的靜态成員。通過new靜态内部類通路靜态内部類的執行個體。
2.匿名内部類
适合隻使用一次的類。
文法: new 父類構造器(實參清單) 實作接口(){
匿名内部類實體!
}
3.方法内部類
這個用的極少,但是方法裡可以定義類。