重學java---4---內部類
阿新 • • 發佈:2018-11-06
內部類作用
- 隱藏程式碼,同時提供對外部類元素訪問的視窗
- 間接提供了“多繼承”的解決方案
- 方便寫回調方法(匿名內部類)
- 面向物件的閉包(一個可呼叫的物件,記錄了一些資訊,這些資訊來自於建立該物件的作用域)
資料訪問
- 內部類通過 “外部類名.this.外部類屬性” 訪問外部類的元素
- 通過 “外部類物件.new 內部類構造方法” 建立內部類物件
什麼時候使用內部類?
- 需要“多繼承”時
- 需要實現特定介面,但是實現後又會帶來一些問題時
- 需要實現特定介面,但該介面功能又不在當前類的職責內時
- 需要用到閉包功能時
各集合為了實現迭代功能都要提供一個各自的迭代器,迭代器便是一個內部類,它不僅實現了 Iterator 介面,還可以訪問集合的資料。如果不使用內部類的話,那麼每次要迭代時,就必須將要操作的集合以引數的形式傳給迭代器,這一來不同性質的集合可能所須要的迭代方法又有不同,便出現了一些不必要的麻煩。所以將迭代器作為內部類使用,不僅達到了可以迭代的目的,同時還可以更加靈活的處理不同型別的集合的迭代。
注意
- 內部類作用域可以是外部類的類級別,也可以是某個外部類的方法級別。無論哪個級別,類的載入機制不變。
舉個例子:如果一個內部類定義在了一個if作用域,不是說這信類的載入有條件限制。有限制的只是它的作用域。
- 非靜態的內部類中,不能包含靜態的欄位和方法
匿名內部類
- 方便寫回調函式
- 只能訪問外部類的final變數
靜態內部類
作為外部類的一個輔助類存在。