クラスとインスタンス変数のアクセス修飾子について学んでいます。パッケージ内でデフォルトのアクセス修飾子にアクセスできることは知っています。
しかし、このコードが機能しない理由がわかりません:
A.java :
defaultこれは、アクセスできるインスタンス変数が 1 つだけあるスーパー クラス ファイルです。
package foo;
public class A {
int a = 10;
}
B.java :
スーパークラスのfooインスタンス変数を使用しようとする、同じパッケージ内のサブクラス ファイルaclass 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