序
類成員包括:字段、方法、內部類
內部類被看成是 字段級別。
內部類
什麼是內部類:定義類結構中的另一個類。
爲什麼使用內部類:
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 內部類處理可以繼承類之外,還可以實現接口