JavaSE入門學習14:Java面向物件之內部類
一內部類概述
內部類(Inner Class)就是定義在另外一個類裡面的類。與之對應,包含內部類的類被稱為外部類。
內部類的主要作用如下:
A內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類。
B內部類的方法可以直接訪問外部類的所有資料,包括私有的資料。
C內部類所實現的功能使用外部類同樣可以實現,只是有時使用內部類更方便。
內部類可分為以下幾種:A成員內部類
B靜態內部類
C方法內部類
D匿名內部類
二 成員內部類
內部類中最常見的就是成員內部類,也稱為普通內部類。我們來看如下程式碼:
執行結果為:
從上面的程式碼中我們可以看到,成員內部類的使用方法:
1)Inner類定義在Outer類的內部,相當於Outer類的一個成員變數的位置,Inner類可以使用任意訪問控制符,如
public、protected、private等。
2)Inner類中定義的test()方法可以直接訪問Outer類中的資料,而不受訪問控制符的影響,如直接訪問Outer類中的
私有屬性a。
3)定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去new一個內部類物件,即:內部
類 物件名 = 外部類物件.new內部類( )。
4)編譯上面的程式後,會發現產生了兩個.class檔案:
其中,第二個是外部類的 .class 檔案,第一個是內部類的 .class 檔案,即成員內部類的 .class 檔案總是這樣:外
部類名$內部類名.class。
使用外部類的注意事項有:
A外部類是不能直接使用內部類的成員和方法的,可先建立內部類的物件,然後通過內部類的物件來訪問其成員
變量和方法。
B如果外部類和內部類具有相同的成員變數或方法,內部類預設訪問自己的成員變數或方法,如果要訪問外部類
的成員變數,可以使用 this 關鍵字。如:
執行結果:
三靜態內部類
靜態內部類是static修飾符去修飾的內部類,這種內部類的特點是:
A靜態內部類不能直接訪問外部類的非靜態成員,但可以通過 new 外部類().成員 的方式訪問。
B如果外部類的靜態成員與內部類的成員名稱相同,可通過“類名.靜態成員”訪問外部類的靜態成員;如果外部類
的靜態成員與內部類的成員名稱不相同,則可通過“成員名”直接呼叫外部類的靜態成員。
C建立靜態內部類的物件時,不需要外部類的物件,可以直接建立 內部類 物件名= new 內部類():
執行結果:
四方法內部類
方法內部類就是內部類定義在外部類的方法中,方法內部類只在該方法的內部可見,即只在該方法中可以使用。
需要注意的事項有:
由於方法內部類不能在外部類的方法以外的地方使用,因此方法內部類不能使用訪問控制符和 static修飾符靜態
不能訪問非靜態,非靜態既可以訪問靜態也可以訪問非靜態。