在 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.animalName 或 super.animalName 或简单地 animalName -是访问 instance variables
的正确方法
我有以下结构-
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.animalName 或 super.animalName 或简单地 animalName -是访问 instance variables
的正确方法