为什么嵌套类的子类不能访问嵌套类的私有字段?

时间:2012-11-25 01:26:33

标签: java nested-class private-members

这样的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

为什么会这样?

3 个答案:

答案 0 :(得分:3)

Bstatic。这相当于在顶级声明它。它不是嵌套类,并且在其词法包含类中无法访问任何私有类。

答案 1 :(得分:2)

嵌套类B可以访问它所包含的所有字段和方法,因为它是A的成员。 B的子类(不是A的成员)没有该访问权限。

答案 2 :(得分:0)

内部类不扩展其包含类;他们本身就是一个班级。

在您的示例中,B是一个没有方法且没有字段的类。它没有变量a

但是你可以访问a类中的变量B,但这只是因为a在它的闭包中;它可以在A的变量处达到峰值,这是内部类的强大功能。