12.3.4 靜態內部類
在上一小節我們討論了內部類,即在一個類中包含有另外一個或者多個類(見本書12.3.3小節)。與 內部類相似,靜態內部類指在一個類的內部包含有另外一個或者多個靜態類。例如:
public class OuterClass {
...
static class StaticInnerClass1 { //內部靜態類
//只可以訪問OuterClass的靜態成員
...
} //StaticInnerClass結束
...
static class StaticInnerClassN { // 更多靜態內部類
//只可以訪問OuterClass的靜態成員
...
} //StaticInnerClassN結束
} //OuterClass結束
與一般內部類不同,在靜態代碼中不能夠使用this操作,所以在靜態內部類中只可以訪問外部類的靜 態變數和靜態方法。使用靜態內部類的目的和使用內部類相同。如果一個內部類不依賴於其外部類的執行個體 變數,或與執行個體變數無關,則選擇應用靜態內部類。
如下例子示範怎樣使用靜態內部類:
///完整程式存在本書配套資來源目錄Ch12名為StaticInnerClassTest.java
public class StaticInnerClassTest {
public static void main( String args[] ) {
OuterClass2 outer = new OuterClass2();
OuterClass2.StaticInnerClass.innerMethod();
//調用靜態內部類的靜態方法
OuterClass2.outerMethod();
//建立靜態內部類對象
OuterClass2.StaticInnerClass staticInner = new OuterClass2.StaticInnerClass();
int num = staticInner.innerMethod2(); //調用靜態內部類執行個體方法
}
}
class OuterClass2 { //外部類
private double x = 0.0; //內部靜態類不可以訪問 外部類實 例變數
static private int n = 10; //外部類 靜態變數
static void outerMethod() { //外部類靜態 方法
System.out.println("from OuterClass...");
}
void outerMethod2() {
System.out.println("from OuterClass’ instance method2 ()...");
}
static class StaticInnerClass { //靜 態內部類
static private int m = 5; //靜態內部類靜 態變數
static void innerMethod() { //靜態內部類靜態 方法
int sum;
n = 20; //只可以訪問外部類靜態變數
sum = n + m;
System.out.println("from InnerClass sum = " + sum);
outerMethod(); //只可以調用外部類靜態 方法
}
int innerMethod2() {
n = 100;
outerMethod();
System.out.println("from InnerMethod2() n = " + n);
return n;
}
} //靜態內部類結束
} //外部類結束