我正在学习类和实例变量的访问修饰符。我知道可以在包内访问默认访问修饰符。
但我不明白为什么这段代码不起作用:
A.java:
这是一个父类(super class)文件,只有一个具有默认
访问权限的实例变量。
package foo;
public class A {
int a = 10;
}
B.java:
同一个包foo
中的子类文件,它尝试使用父类(super class)class A
的实例变量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);
}
}
这个程序应该可以工作,但我得到了找不到符号
错误。
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
访问修饰符的规则实例变量。这里,类 A
是公共(public)的,因此它对类 B
是可见的。 class A
的实例变量 a
具有 default
访问权限,因此如果 class A
扩展则可以访问它同一包中的其他类。
最佳答案
看起来您已将这两个类转储到当前目录(或类似目录)中。它们需要位于名为 foo
的文件中,并具有正确的文件名 (A.java
)。并且您的编译器类路径(或源路径)设置为包含 foo
目录的目录。
线索是您有两条错误消息。通常最好先对第一个进行排序,因为后续消息可能会变得奇怪。
关于java - 为什么在子类中找不到具有默认访问修饰符的实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16946297/