成员内部类可以访问其外部类的成员(甚至是私有成员)。但是,方法中包含的本地内部类没有这样的内部类。
为什么?
给我的一个原因是,对于JVM而言,没有内部类的概念,它为每个内部类创建了顶级类,这就是为什么他们不能访问私有类的原因成员,但对于他们两个人来说都应该是真的。
此外,本地内部类实际上可以访问最终成员。为什么会这样?
答案 0 :(得分:1)
这是一个全面的例子,它可以访问什么,不是什么:
public class Outer {
private static String staticOuterField;
private String outerField;
public void method() {
class MethodInner {
public void methodInnerMethod() {
System.out.println(staticOuterField); // OK
System.out.println(outerField); // OK
}
}
}
public static void staticMethod() {
class StaticMethodInner {
public void staticMethodInnerMethod() {
System.out.println(staticOuterField); // OK
System.out.println(outerField); // Not accessible
}
}
}
static class StaticInner {
public void staticInnerMethod() {
System.out.println(staticOuterField); // OK
System.out.println(outerField); // Not accessible
}
}
class Inner {
public void innerMethod() {
System.out.println(staticOuterField); // OK
System.out.println(outerField); // OK
}
}
}
外部静态字段始终可以从内部类访问。只有在内部类绑定到外部实例时,才能访问外部实例字段。如果内部类是非静态内部类或在实例方法中声明的类,则就是这种情况。
内部类背后的整个想法是,他们可以完全访问外部类成员,也可以访问私有成员。这使得它们与适用一般访问规则的顶级(非内部)类不同。 final
修饰符此处没有任何操作。