嵌套類:
1. 可以擴展其他類,包括包圍的類,也可以實現任何接口,也可以被擴展
2. 可以被聲明成final和abstract,可使用註解
3. 是其包圍類型的成員
A. 非靜態嵌套類,即內部類
a. 分類:
1. 在一個類(外部類)中直接定義的內部類;
2. 在一個方法(外部類的方法)中定義的內部類;
3. 匿名內部類
b. 性質
不能定義靜態屬性和靜態方法
可以訪問外部類的所有實例屬性,靜態屬性
a1.內部成員類
內部類只在外部類的作用域內是可知的,如果外部類外的任何代碼嘗試初始化內部類I或使用它,編譯就不會通過。同時,內部類的變量成員只在內部內內部可見,若外部類或同層次的內部類需要訪問,需通過內部對象訪問,不可直接訪問內部類的變量
public、default修飾的內部類,通過new 外部類().new inner(),創建對象
內部成員類持有一個外部對象的引用,內部類的實例可以對外部類的實例屬性進行修改。
當調用內部類的構造器的時候,會把當前創建的內部類對象實例中持有的外部對象引用賦值爲當前創建內部類的外部類實例
a2. 方法中定義內部類
1. 在方法中定義的內部類的可見性更小,只在方法內部可見,在外部類中不可見
2.
方法中的內部類可直接訪問外部類的變量,且只能訪問本方法的final成員。若在方法內部定義成員,只允許final
修飾或不加修飾符,其他像static、public等均不可用。
3. 不能有訪問修飾符
B. 靜態嵌套類
1. 可直接訪問外部類的靜態變量和方法,不能直接訪問外部類的非靜態成員
2. 外部類可以通過內部類對象,訪問內部類的變量(私有和公有變量),不能直接訪問
3. 對於public修飾的靜態嵌套類,用 new 外部類.內部類()的方式創建 new
Outer.PublicNestedClass();
默認的靜態嵌套類,可以在同一包名下,用 new 外部類.內部類()的方式創建
詳細內容,見前兩篇