Java 內部類
1. 例項內部類
A. 定義:是指沒有用static修飾的內部類,也稱非靜態內部類;
B. 示例
public class Outer { class Inner { // 例項內部類 } }
C. 特點:在外部類的靜態方法和外部類以外的其他類中,必須通過外部類的例項建立內部類的例項;
在例項內部類中,可以訪問外部類的所有成員;
在外部類中不能直接訪問內部類的成員,而必須通過內部類的例項去訪問;
外部類例項與內部類例項是一對多的關係,也就是說一個內部類例項只對應一個外部類例項,而一個外部類例項則可以對應多個內部類例項;
在例項內部類中不能定義 static 成員,除非同時使用 final 和 static 修飾。
2. 靜態內部類
A. 定義:是指使用static修飾的內部類;
B. 示例
public class Outer { static class Inner { // 靜態內部類 } }
C. 特點:在建立靜態內部類的例項時,不需要建立外部類的例項;
靜態內部類中可以定義靜態成員和例項成員。外部類以外的其他類需要通過完整的類名訪問靜態內部類中的靜態成員,如果要訪問靜態內部類中的例項成員,則需要通過靜態內部類的例項;
靜態內部類可以直接訪問外部類的靜態成員,如果要訪問外部類的例項成員,則需要通過外部類的例項去訪問。
3. 區域性內部類
A. 定義:是指在一個方法中定義的內部類;
B. 示例
public class Test { public void method() { class Inner { // 區域性內部類 } } }
C. 特點:區域性內部類與區域性變數一樣,不能使用訪問控制修飾符(public、private和protected)和static修飾符修飾;
區域性內部類只在當前方法中有效;
區域性內部類中不能定義 static 成員;
區域性內部類中還可以包含內部類,但是這些內部類也不能使用訪問控制修飾符(public、private 和 protected)和 static 修飾符修飾;
在區域性內部類中可以訪問外部類的所有成員;
在區域性內部類中只可以訪問當前方法中 final 型別的引數與變數。如果方法中的成員與外部類中的成員同名,則可以使用 <OuterClassName>.this.<MemberName> 的形式訪問外部類中的成員。
4. 匿名類
A. 定義:
B. 示例
C. 特點: