淺談Java中的內部類

已經學習了最常使用的類,那麼今天就來談談內部類吧。

內部類概述

我們平時碰到的類都是平級關係的,那麼什麼是內部類呢?
顧名思義,內部類就是定義在類中的一個類,即是在類的內部又定義了另一個類,那麼就把此類稱爲內部類。
舉個簡單的例子:在類A中定義了一個類B,那麼就把類B稱爲內部類,相對來講,類A稱爲外部類。

在這裏插入圖片描述

根據內部類所在的位置不同,可以分爲成員內部類局部內部類
內部類的特點

  • 內部類可以直接訪問外部類的所有成員(無需創建對象),包括外部類的私有成員。
    在這裏插入圖片描述
  • 外部類要訪問內部類的成員時,需要先創建內部類的對象,纔可以訪問。

在這裏插入圖片描述
在這裏插入圖片描述

下面就來細談成員內部類和局部內部類。

成員內部類

在類的成員位置定義的類,就稱爲成員內部類。

在這裏插入圖片描述
成員內部類的特點

  • 可以在測試類中,直接創建成員內部類的對象。
    格式爲:
    外部類名.內部類名 內部類對象名 = new 外部類名().new 內部類名();
    在這裏插入圖片描述

成員內部類的修飾符

  • private修飾符,可以保證數據的安全性。
  • static修飾符,可以方便訪問數據。
    靜態內部類訪問的外部類數據必須用靜態修飾。(靜態的只能訪問靜態的)
    成員方法可以是靜態的也可以是非靜態的。

成員內部類被靜態修飾後的訪問方式是:
訪問格式:
外部類名.內部類名 對象名 = new 外部類名.內部類名();

局部內部類

在類的局部位置定義的類爲局部內部類。
在這裏插入圖片描述
局部內部類的特點

  • 可以直接訪問外部類的成員
    在這裏插入圖片描述

  • 我們不能在測試類中直接創建局部內部類的對象使用局部內部類的成員(局部內部類隱藏太深),我們可以在外部類中創建內部類的對象,在測試類中創建外部類對象,間接地調用局部內部類的成員
    在這裏插入圖片描述
    在這裏插入圖片描述

  • 可以創建內部類對象,通過對象調用內部類方法,來使用局部內部類功能

  • 局部內部類訪問局部變量必須用final修飾
    原因:局部變量會隨着方法的調用完畢而消失,這個時候,局部對象並沒有立馬從堆內存中消失,還要使用那個變量。爲了讓數據還能繼續被使用,就用fianl修飾,這樣,在堆內存裏面存儲的其實是一個常量值。
    JDK1.8之後,final會默認加上,不用手動去加,但這個語法是需要我們瞭解的

匿名內部類

何爲匿名內部類?
匿名內部類的內部類的簡化寫法,沒有了名字。如: new 內部類名();
匿名內部類的使用前提:存在一個類或者接口;這裏的類可以是具體類也可以是抽象類。

匿名內部類的格式爲:
new 類名或接口名(){
重寫方法;
} ;

匿名內部類的本質實際上,就是一個對象,是繼承了一個抽象類或者實現了接口的子類匿名對象。
在這裏插入圖片描述
可以使用匿名內部類直接調用重寫的方法。
在這裏插入圖片描述
考慮方法的形式參數或者返回值類型是引用類型的情況,在這樣的情況下,若只需要傳遞一次引用類型的參數,我們可以使用匿名內部類,這樣的做法是比較方法的(相比較於,定義抽象類或接口的子類,再定義子類對象)。
在這裏插入圖片描述
在這裏插入圖片描述

接口同上。
在這裏插入圖片描述
在這裏插入圖片描述

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