在 Java 中,內部類(Inner Class)是定義在另一個類(外部類)內部的類。內部類可以訪問外部類的所有成員,包括私有成員。關于靜態成員,Java 中有兩種類型的靜態成員:靜態變量(static variable)和靜態方法(static method)。
在內部類中處理靜態成員,需要注意以下幾點:
內部類不能直接訪問外部類的靜態成員,需要通過外部類對象來訪問。因為靜態成員屬于類,而不是類的實例。
如果內部類是靜態的(static nested class),那么它可以訪問外部類的所有成員,包括靜態成員。靜態內部類不需要外部類的實例就可以創建對象,它可以直接通過外部類名來訪問靜態成員。
下面是一些示例代碼:
// 外部類
public class OuterClass {
// 外部類的靜態變量
public static int staticVar = 10;
// 外部類的非靜態變量
public int nonStaticVar = 20;
// 外部類的靜態方法
public static void staticMethod() {
System.out.println("This is a static method in the outer class.");
}
// 外部類的非靜態方法
public void nonStaticMethod() {
System.out.println("This is a non-static method in the outer class.");
}
}
// 非靜態內部類
public class NonStaticInnerClass {
public void accessOuterStaticMembers() {
// 通過外部類對象訪問靜態成員
System.out.println("Outer static variable: " + OuterClass.staticVar);
OuterClass.staticMethod();
}
}
// 靜態內部類
public class StaticNestedClass {
public void accessOuterStaticMembers() {
// 靜態內部類可以直接訪問外部類的靜態成員
System.out.println("Outer static variable: " + OuterClass.staticVar);
OuterClass.staticMethod();
}
}
// 測試類
public class Test {
public static void main(String[] args) {
// 創建非靜態內部類對象
NonStaticInnerClass nonStaticInner = new NonStaticInnerClass();
nonStaticInner.accessOuterStaticMembers();
// 創建靜態內部類對象
StaticNestedClass staticNested = new StaticNestedClass();
staticNested.accessOuterStaticMembers();
}
}
在這個示例中,我們定義了一個外部類 OuterClass
,其中包含靜態和非靜態成員。然后我們定義了兩個內部類:一個非靜態內部類 NonStaticInnerClass
和一個靜態內部類 StaticNestedClass
。在這兩個內部類中,我們都展示了如何訪問外部類的靜態成員。