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;
}
} //静态内部类结束
} //外部类结束