1. 程式人生 > >JavaSE入門學習14:Java面向物件之內部類

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修飾符靜態

不能訪問非靜態,非靜態既可以訪問靜態也可以訪問非靜態。