java - 为什么在子类中找不到具有默认访问修饰符的实例变量?

标签 java

我正在学习类和实例变量的访问修饰符。我知道可以在包内访问默认访问修饰符。

但我不明白为什么这段代码不起作用:

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/

相关文章:

java - 无法处理 EJB 类的业务接口(interface)

java - 使用正则表达式从字符串中提取数字

java - 从 Java 类内部调用存储过程并写入控制台?

java - 如何写入 XML 中的特定标记?

java - 在 Java 中订购一个新的 Gson().toJson()

java - 使用 vector jswing 获取正确的表格标题

java - 找不到驱动程序

java - 为什么在取消定时器任务之前让主线程进入休眠状态?

java - 使用arraylist在txt文件中逐行插入数据

java - Linux Redhat .bash_profile 不起作用