Java基礎筆記之內部類
內部類
簡單說明
內部類只能被相應的外部類使用,不允許同一個包中的其他類直接訪問。
內部類可以訪問外部類的成員,因為內部類被當作外部類的成員,類成員之間可以相互訪問,但是外部內不能直接訪問內部類的成員,包括Field和Method。
非靜態內部類
每個內部類物件都引用一個外部類的this變數,假如內部類的某個方法中想訪問外部類的一個Field,同時它自己的成員Field中也有一個同樣的Field,那麼:
通過this.變數名來訪問自己的成員Field;
通過外部類名.this.變數名來訪問外部類的Field。
靜態內部類
用static修飾的內部類,該內部類屬於外部類本身,而不屬於外部類的某個物件,根據靜態成員不能訪問非靜態成員的規則,靜態內部類只能訪問外部類的類成員,不能訪問外部類的例項成員。因此可以通過外部類名.變數名訪問外部類的類成員。
在外部使用內部類
用private修飾的內部類在外部類的內部使用;
用protected修飾的內部類可以在外部類內部被子類繼承,在外部類外部跟private修飾的一樣。
不加修飾符的內部類只能在外部類所在的包內部使用;
用public修飾的內部類能在任何地方使用,當然也要依賴外部類的訪問許可權。
例項化非靜態內部類的形式:OuterClass.InterClass varName = new OuterClass().new InterClass();
或者: OuterClass outClassObject = new OutClass();
OuterClass.InterClass varName
例項化靜態內部類的形式:OuterClass.InterClass varName = new OuterClass.InterClass();
區別:建立內部類物件時,靜態內部類只需使用外部類即可呼叫構造器,而非靜態內部類必須呼叫外部類的物件來呼叫構造器。
區域性內部類:區域性內部類和區域性變數都是隻是在定義其的方法類有效,因此添不新增訪問控制符沒什麼關係,但是java規定所有的區域性成員不能使用訪問控制符修飾。
匿名內部類:只能使用一次的類
固定格式: new 父類構造器(形參列表) | 實現介面()
{
//匿名內部類的類體部分
}
規定:
1. 匿名內部類必須也只只能繼承一個父類或實現一個介面,而且匿名內部類不能是抽象類,因為系統在建立匿名內部類時,會立即建立匿名內部類的物件。
2. 匿名內部類不能定義構造器,因為沒有類名,可以通過初始化塊完成構造器的工作。