在 Java 中的子 class 中无法访问受保护的变量

Protected variable not accessible within child class in Java

我有以下结构-

App.java-

package JohnParcellJavaBasics.AccessModifierDemo;
import JohnParcellJavaBasics.AccessModifierDemo.*;

public class App {
    public static void main(String[] args) {
        
    }
}

AnimalApp.java-

package JohnParcellJavaBasics.AccessModifierDemo.Animal;
import JohnParcellJavaBasics.AccessModifierDemo.Animal.*;

public class AnimalApp {
    protected String animalName;
    public void myMethod() {
        
    }
}

Eagle.java-

package JohnParcellJavaBasics.AccessModifierDemo.Animal.Bird;
import JohnParcellJavaBasics.AccessModifierDemo.Animal.*;

public class Eagle extends AnimalApp {
    public void myMethod() {
        AnimalApp.animalName = "abc";
    }
}

在文件 - Eagle.java 中,在 animalName 下面的行 AnimalApp.animalName = "abc"; 中有一个读取行,内容为 -

The field AnimalApp.animalName is not visible

这怎么可能?

我在 Ubuntu 和 OpenJDK 11 上使用 VSCode。

发生这种情况是因为您混淆了静态成员和实例成员。

AnimalApp.animalName - 是一种引用 static 变量的方法(通过使用 class 名称,因为静态变量驻留在 class 上,它们不属于 class 的任何实例,因此不能被继承。

this.animalNamesuper.animalName 或简单地 animalName -是访问 instance variables

的正确方法