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

Bですstatic。これにより、トップレベルで宣言するのと同じになります。これはネストされたクラスではなく、レキシカルに含まれるクラス内のプライベートなものにはアクセスできません。

于 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 に答える