为什么静态嵌套类不能访问外部类的“this”指针?

时间:2013-08-13 16:23:21

标签: java class nested-class static-classes

enter image description here

困扰我的是第二点。

我认为这可能与“this”指针不是静态的事实有关,因此内部类无法访问它。我不确定这是否是正确的解释。

这也为我提出了另一个问题,即“这个”指针定义在哪里?“

2 个答案:

答案 0 :(得分:11)

static嵌套类和非static之间的区别恰恰是非static内部类的实例与封闭的特定实例相关联class,而static内部类不是。对于要与之关联的A.this内部类的实例, 没有static

答案 1 :(得分:2)

如果内部类是static,则可以在没有外部类的封闭实例的情况下对其进行实例化。对于非static内部类,实例化需要外部类的实例。例如,如果您的类结构是这样的:

public class A {
    public static class B {
    }

    public class C {
    }
}

然后要实例化BC,你必须这样做:

// simply
A.B b = new A.B();
// however
A.C c = new A().new C();

在实例化非static内部类的后台,将封闭类的实例传递给构造函数。然后可以访问OuterClass.this的实例。

要验证“幕后”的事情,你可以通过反射检查声明的构造函数和内部类的声明字段:

// prints that there is one field of type A called "this$1"
for (Field f : A.C.class.getDeclaredFields()) {
    System.out.println(f);
}

// prints that the constructor takes in one parameter of type A
for (Constructor c : A.C.class.getDeclaredConstructors()) {
    System.out.println(c);
}