Java內部類的分類及特點

 

類成員包括:字段、方法、內部類

內部類被看成是 字段級別。

內部類

什麼是內部類:定義類結構中的另一個類。

爲什麼使用內部類

        1 增強封裝性:將內部類隱藏在外部類中。防止其他類訪問內部類。

        2 提高可讀性和可維護性。

        3 內部類可以直接訪問外部類的成員變量和方法。

根據修飾符或者定位四種內部類

        ① 實例內部類:內部類沒有使用static修飾

        ② 靜態內部類:內部類使用static修飾

        ③ 局部內部類:在方法中的內部類

        ④ 匿名內部類:適合於僅使用一次的類,屬於局部內部類的特殊情況

對於每個內部類來說:java編譯器會生成獨立的.class文件

        成員內部類:外部類名字$內部類名字

        局部內部類:外部類名字$數字 內部類名字

        匿名內部類:外部類名字$數字


靜態內部類

        使用static 修飾內部類,說明靜態內部類屬於外部類,不屬於外部類對象

特點:

        1 靜態內部類的實例不會自動持有外部類的特定實例的引用,在創建內部類的實例時,不必創建外部類的實例

                外部類名.內部類名  A.B b =new A.B();

        2 靜態內部類可以直接訪問外部類的靜態成員,如果訪問外部類的實例成員,必須通過外部類的實例去訪問;

        3 在靜態內部類中可以定義靜態成員和實例成員;

        4 測試類可以通過完整的類名直接訪問靜態內部類的靜態成員; 

                外部類.內部類.靜態成員    Outter.Inner.age

 

實例內部類

        沒有使用static 修飾內部類,說明內部類屬於外部類對象,不屬於外部類本身

特點:

        1 創建內部類對象必須通過外部類對象創建;

                Outer.Inner inn = new Outer().new Inner();

        2 內部類自動持有外部類的實例引用,內部類可以直接訪問外部類成員

        3 外部類不能直接訪問內部類成員,必須通過內部類實例訪問

        4 實例內部類中不能定義靜態成員

        5 如果實例內部類和外部類存在同名字段或方法abc,那麼在內部類中:

                abc 表示局部成員

                this.abc表示訪問內部類成員

                外部類.this.abc表示外部類成員

 

局部內部類

        在方法中定義的內部類,其可見範圍是當前方法和局部變量是一個級別。

特點:

        1 不能使用public private protected static修飾符

        2 局部內部類只能在當前方法中使用

        3 局部內部類和實例內部類一樣,不能包含靜態成員

        4 局部內部類和實例內部類,可以訪問外部的所有成員

        5 局部內部類訪問的是局部變量,必須使用final修飾

在JAVA8中,會自動隱式final,但是依然是常量,不能改變值

 

匿名內部類

        是一個沒有名稱的局部內部類,適合只使用一次的類。

特點:

        1 匿名內部類本身沒有構造器,但是會使用父類的構造器

        2 匿名類儘管沒有構造器,但是可以在匿名類中提供一段實例初始化代碼塊,JVM在調用父類構造器後,會執行該代碼塊

        3 內部類處理可以繼承類之外,還可以實現接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章