クラスとインスタンス変数のアクセス修飾子について学んでいます。パッケージ内でデフォルトのアクセス修飾子にアクセスできることは知っています。
しかし、このコードが機能しない理由がわかりません:
A.java :
default
これは、アクセスできるインスタンス変数が 1 つだけあるスーパー クラス ファイルです。
package foo;
public class A {
int a = 10;
}
B.java :
スーパークラスのfoo
インスタンス変数を使用しようとする、同じパッケージ内のサブクラス ファイルa
class A
package foo;
class B extends A {
public static void main(String[] args) {
B b = new B();
b.test();
}
public void test(){
System.out.println("Variable is : " + a);
}
}
このプログラムは動作するはずですが、cannot find symbol
エラーが発生しました。
B.java:2: error: cannot find symbol
class B extends A {
^
symbol: class A
B.java:8: error: cannot find symbol
System.out.println("Variable is : " + a);
^
symbol: variable a
location: class B
2 errors
default
ルールに従って、アクセス修飾子を持つインスタンス変数はパッケージ内でアクセスできるため、このエラーの理由は何ですか。ここでは、class A
は公開されているため、 に表示されますclass B
。のインスタンス変数a
にclass A
はアクセス権があるため、同じパッケージ内の他のクラスによって が拡張されdefault
ている場合にアクセスできます。class A