我有以下結構 -
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中,在下面的行AnimalApp.animalName = "abc";中animalName有一個讀取行,內容為 -
The field AnimalApp.animalName is not visible
這怎么可能?
我在 Ubuntu 和 OpenJDK 11 上使用 VSCode。
uj5u.com熱心網友回復:
發生這種情況是因為您混淆了靜態成員和實體成員。
AnimalApp.animalName - 是一種參考靜態變數的方法(通過使用類名,因為靜態變數駐留在類上,它們不屬于類的任何實體,因此不能被繼承)。
this.animalName或super.animalName或只是animalName - 是訪問實體變數的正確方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/416762.html
標籤:
