1. 程式人生 > >內部類,格式先這樣,後面再調

內部類,格式先這樣,後面再調

rdquo vat 同名 public 內容 如何 重點 解析 間接

如果一個事物的內部包含另一個事物,那麽這就是一個類內部包含另一個類。
例如:身體和心臟的關系,又如汽車和發動機的關系。
/*
分類:
1.成員內部類
成員內部類的定義格式:
修飾符 class 外部類名稱{
修飾符 class 內部類名稱{

}

}
註意:內用外,隨意訪問;外用內,需要借助內部類對象
2.局部內部類(包含匿名內部類)
如果一個類是定義在一個方法內部的,這就是一個局部內部類
局部:只有當前所屬的方法才能使用它,出了這個方法外面就不能用了
定義格式:
修飾符 class 外部類名稱{
修飾符 返回值類型 外部類方法名稱(參數列表) {

class 局部內部類名稱{
// ...
}
// 在這裏使用這個內部類,調用時候,用外部類對象.方法();執行方法時候就調用內部類了
}
}
局部內部類的final問題:如果希望方位所在方法的局部變量,那麽這個變量必須是【有效final的,即保證變量不能修改,從java8 開始final可以省略】

定義一個類的時候,權限修飾符規則:
1.外部類:public/(default)
2.成員內部類:public/protected/(default)/private

3.局部內部類:什麽都不能寫


===================
如何使用成員內部類?有兩種方式:
1. 間接方式:在外部類的方法中,使用內部類;main知識調用外部類方法來間接使用內部類
2. 直接方式:公式:
【外部類名稱.內部類名稱 對象名 = new 外部類名稱().new 內部類名稱();】


內部類同名變量訪問
System.out.println(num);//30
System.out.println(this.num);//20
System.out.println(Body.this.num);//10 外部類的成員變量

*/
重點:匿名內部類
/*
如果接口的實現類,或者是父類的子類只需要使用唯一的一次,

那麽這種情況下就可以省略該類的定義,而改為使用【匿名內部類】

匿名內部類的定義格式:
接口名稱 對象名 = new 接口名稱(){
//覆蓋重寫所有抽象方法
};
*/
使用匿名內部類的註意事項:
對格式進行解析“new 接口名稱(){...};”
1.new代表創建對象的動作
2.接口名稱就是匿名內部類需要實現哪個接口
3.{...}這才是匿名內部類的內容
另外,還需註意:
1.匿名內部類在創建對象的時候,只能使用唯一一次。
如果希望多次創建對象,而且類內容一樣的話,就必須使用單獨定義的實現類了
2.匿名對象,在調用方法的時候,只能調用唯一一次。
如果希望多次調用方法,必須給取名。
匿名內部類和匿名對象不是一回事

內部類,格式先這樣,後面再調