JavaSE學習 Day4 - Java流程控制
阿新 • • 發佈:2021-06-20
內部類
- 如果定義類在區域性位置(方法中 程式碼塊):區域性內部類 匿名內部類
- 定義在成員位置 成員內部類 靜態內部類
基本介紹
-
一個類的內部又完整的嵌套了另一個類結構,被巢狀的類稱為內部類,巢狀其他類的類稱為外部類,是我們類的第五大成員
-
類的五大成員是那些
- 屬性
- 方法
- 構造器
- 程式碼塊
- 內部類
-
內部類最大的特點就是可以直接訪問私有屬性,並且可以體現類與類之間的包含關係
基本語法
class Outer{ //外部類
class Inner{
//內部類
}
}
class Other{
//外部其他類
}
內部類的分類
-
定義在外部類區域性位置上(比如方法內)
- 區域性內部類
- 匿名內部類
-
定義在外部類的成員位置上
- 成員內部類
- 靜態內部類
區域性內部類使用
區域性內部類是定義在外部類的區域性位置,比如方法中,並且有類名
- 可以直接訪問外部類的所有成員,包括私有的
- 不能新增訪問修飾符,因為它的地址就是一個區域性變數,區域性變數是不能使用修飾符的,但是可以使用final修飾,因為區域性變數也可以使用final
- 作用域:僅僅在定義它的方法或者程式碼塊中
- 區域性內部類訪問外部類成員:直接訪問
- 外部類訪問區域性內部類的成員:建立物件再訪問
- 區域性內部類定義在方法中或程式碼塊中
- 作用域在方法體或者程式碼塊中
- 本質仍是一個類
- 外部其他類不能訪問區域性內部類,因為區域性內部類的地位是一個區域性變數
- 如果外部類和區域性內部類的成員重名時,預設遵循就近原則,如果想訪問外部類的成員則可以使用 外部類名.this.成員 訪問
匿名內部類使用
- 本質是類
- 內部類
- 該類沒有名字
- 同時還是一個物件
- 說明
- 匿名內部類是定義在外部類的區域性位置,比如方法中,並且沒有類名
- 基本語法
new 類或介面(引數列表){
類體
};
注意事項
- 匿名內部類的語法比較奇特,因為匿名內部類既是一個類的定義,同時它本身也是一個物件,因此從語法上看,它既有定義類的特徵,也有建立物件的特徵,因此可以呼叫匿名內部類方法
- 可以直接訪問外部類所有成員,包括私有的
- 不能新增訪問修飾符,因為它的低位就是一個區域性變數
- 僅僅作用與方法或程式碼塊中
- 匿名內部類訪問外部類成員直接訪問
- 外部其他內不能訪問匿名內部類
- 如果外部類和匿名內部類的成員重名時,匿名內部類訪問的話,預設遵循就近原則,如果想訪問外部類的成員,則可以使用 外部類名.this.成員訪問
成員內部類
成員內部類是定義在外部類的 成員位置,並且沒有static修飾
- 可以直接訪問外部類的所有成員,包括私有的
- 可以新增任意訪問修飾符,因為它的地位就是一個成員
- 作用域:和外部類其他成員一樣,為整個類體,在外部類的成員方法中建立成員內部類,再呼叫方法
- 成員內部類訪問外部類成員,直接訪問
- 外部類訪問成員內部類建立物件再訪問
- 如果外部類和內部類的成員重名時,內部類訪問的話,預設遵循就近原則,如果想訪問外部類的成員,則可以使用 外部類名.this.成員 訪問
靜態內部類使用
靜態內部類是定義在外部類的成員位置,並且有static修飾
- 可以直接訪問外部類的所有靜態成員,包含私有的,但不能直接訪問非靜態成員
- 可以新增任意訪問修飾符,因為它的地位就是一個成員
- 作用域:同其他類的成員,為一個整體
- 靜態內部類訪問外部類 直接訪問所有靜態成員
- 外部類訪問靜態內部類 建立物件再訪問
- 如果外部類和靜態內部類的成員重名時,靜態內部類訪問時,預設遵循就近原則,如果想訪問外部類的成員,則可以使用 外部類名.成員 訪問