1. 程式人生 > >重學java---4---內部類

重學java---4---內部類

內部類作用

  1. 隱藏程式碼,同時提供對外部類元素訪問的視窗
  2. 間接提供了“多繼承”的解決方案
  3. 方便寫回調方法(匿名內部類)
  4. 面向物件的閉包(一個可呼叫的物件,記錄了一些資訊,這些資訊來自於建立該物件的作用域)

資料訪問

  1. 內部類通過 “外部類名.this.外部類屬性” 訪問外部類的元素
  2. 通過 “外部類物件.new 內部類構造方法” 建立內部類物件

什麼時候使用內部類?

  1. 需要“多繼承”時
  2. 需要實現特定介面,但是實現後又會帶來一些問題時
  3. 需要實現特定介面,但該介面功能又不在當前類的職責內時
  4. 需要用到閉包功能時

各集合為了實現迭代功能都要提供一個各自的迭代器,迭代器便是一個內部類,它不僅實現了 Iterator 介面,還可以訪問集合的資料。如果不使用內部類的話,那麼每次要迭代時,就必須將要操作的集合以引數的形式傳給迭代器,這一來不同性質的集合可能所須要的迭代方法又有不同,便出現了一些不必要的麻煩。所以將迭代器作為內部類使用,不僅達到了可以迭代的目的,同時還可以更加靈活的處理不同型別的集合的迭代。

注意

  1. 內部類作用域可以是外部類的類級別,也可以是某個外部類的方法級別。無論哪個級別,類的載入機制不變。

舉個例子:如果一個內部類定義在了一個if作用域,不是說這信類的載入有條件限制。有限制的只是它的作用域。

  1. 非靜態的內部類中,不能包含靜態的欄位和方法

匿名內部類

  1. 方便寫回調函式
  2. 只能訪問外部類的final變數

靜態內部類

作為外部類的一個輔助類存在。