0

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

为什么会发生这种情况?

4

3 回答 3

3

Bstatic。这使得它等同于在顶层声明它。它不是一个嵌套类,并且无法访问其词法包含类中的任何私有内容。

于 2012-11-25T01:30:37.323 回答
2

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

于 2012-11-25T01:37:30.990 回答
0

内部类不扩展它们的包含类;他们本身就是一个阶级。

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

但是,您可以访问类a内部的变量B,但这仅仅是因为ais 在它的闭包中;它可以在 的变量处达到峰值A,这是内部类的力量。

于 2012-11-25T01:28:54.280 回答