Java中的內部類總結

2021-09-11 07:18:34 字數 2006 閱讀 7477

內部類( inner class )就是定義在另外乙個類裡面的類。與之對應,包含內部類的類被稱為外部類。

主要作用:

內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同乙個包中的其他類訪問該類

內部類的方法可以直接訪問外部類的所有資料,包括私有的資料

內部類所實現的功能使用外部類同樣可以實現,只是有時使用內部類更方便

種類:成員內部類

靜態內部類

方法內部類

匿名內部類

成員內部類:

內部類中最常見的就是成員內部類,也稱為普通內部類。我們來看如下**:

執行結果:

從上面的**中我們可以看到,成員內部類的使用方法:

1、 inner 類定義在 outer 類的內部,相當於 outer 類的乙個成員變數的位置,inner 類可以使用任意訪問控制符,如 public 、 protected 、 private 等

2、 inner 類中定義的 test() 方法可以直接訪問 outer 類中的資料,而不受訪問控制符的影響,如直接訪問 outer 類中的私有屬性a

3、 定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去 new 乙個內部類物件,即:內部類 物件名 = 外部類物件.new 內部類( );

4、 編譯上面的程式後,會發現產生了兩個 .class 檔案

其中,第二個是外部類的 .class 檔案,第乙個是內部類的 .class 檔案,即成員內部類的 .class 檔案總是這樣:外部類名$內部類名.class

2、 如果外部類和內部類具有相同的成員變數或方法,內部類預設訪問自己的成員變數或方法,如果要訪問外部類的成員變數,可以使用 this 關鍵字。如:

執行結果:

靜態內部類:

是 static 修飾的內部類,這種內部類的特點是:

1、 靜態內部類不能直接訪問外部類的非靜態成員,但可以通過 new 外部類().成員 的方式訪問

2、 如果外部類的靜態成員與內部類的成員名稱相同,可通過「類名.靜態成員」訪問外部類的靜態成員;如果外部類的靜態成員與內部類的成員名稱不相同,則可通過「成員名」直接呼叫外部類的靜態成員

3、 建立靜態內部類的物件時,不需要外部類的物件,可以直接建立 內部類 物件名= new 內部類();

執行結果:

方法內部類:

就是內部類定義在外部類的方法中,方法內部類只在該方法的內部可見,即只在該方法內可以使用。

一定要注意哦:由於方法內部類不能在外部類的方法以外的地方使用,因此方法內部類不能使用訪問控制符和 static 修飾符。

匿名內部類:

使用它我們必須要繼承乙個父類或者實現乙個介面,當然也僅能只繼承乙個父類或者實現乙個介面。同時它也是沒有class關鍵字,這是因為匿名內部類是直接使用new來生成乙個物件的引用。當然這個引用是隱式的。

格式:new 父類構造器(引數列表)|實現介面()

介面是不能被new的,匿名內部類new的時候,後面帶了一對花括號,表示new的是這個介面的實現類,這個實現類是沒有名字的。

注意:1、使用匿名內部類時,我們必須是繼承乙個類或者實現乙個介面,但是兩者不可兼得,同時也只能繼承乙個類或者實現乙個介面。

2、匿名內部類中是不能定義建構函式的。

3、匿名內部類中不能存在任何的靜態成員變數和靜態方法。

4、匿名內部類為區域性內部類,所以區域性內部類的所有限制同樣對匿名內部類生效。

5、匿名內部類不能是抽象的,它必須要實現繼承的類或者實現的介面的所有抽象方法。

參考:

java中內部類總結

內部類不是很好理解,但說白了其實也就是乙個類中還包含著另外乙個類 如同乙個人是由大腦 肢體 器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟 它也有自己的屬性和行為 血液 跳動 顯然,此處不能單方面用屬性或者方法表示乙個心臟,而需要乙個類 而心臟又在人體當中,正如同是內部類在外部內當中...

java中的內部類總結

如同乙個人是由大腦 肢體 器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟 它也有自己的屬性和行為 血液 跳動 顯然,此處不能單方面用屬性或者方法表示乙個心臟,而需要乙個類 而心臟又在人體當中,正如同是內部類在外部內當中 例項1 內部類的基本結構 1 2 3 4 5 6 7 8 9 1...

java中的內部類總結

內部類不是很好理解,但說白了其實也就是乙個類中還包含著另外乙個類 如同乙個人是由大腦 肢體 器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟 它也有自己的屬性和行為 血液 跳動 顯然,此處不能單方面用屬性或者方法表示乙個心臟,而需要乙個類 而心臟又在人體當中,正如同是內部類在外部內當中...