这样的Java代码:
public class A {
private static int a;
public static class B {
static void funcc() {
a = 3;
}
}
}
public class C extends A.B {
public void func() {
a = 1;
}
}
当我尝试编译它时,会发生错误:
C.java:3: error: cannot find symbol
a = 1;
^
symbol: variable a
location: class C
1 error
为什么会这样?
答案 0 :(得分:3)
B
是static
。这相当于在顶级声明它。它不是嵌套类,并且在其词法包含类中无法访问任何私有类。
答案 1 :(得分:2)
嵌套类B
可以访问它所包含的所有字段和方法,因为它是A
的成员。 B
的子类(不是A
的成员)没有该访问权限。
答案 2 :(得分:0)
内部类不扩展其包含类;他们本身就是一个班级。
在您的示例中,B
是一个没有方法且没有字段的类。它没有变量a
。
但是你可以访问a
类中的变量B
,但这只是因为a
在它的闭包中;它可以在A
的变量处达到峰值,这是内部类的强大功能。