我想從子類訪問在Superclass中聲明爲protected的變量。繼承的子類中的Java public/protected變量值爲空
該值在子類中顯示爲null
,儘管它在超類中正確顯示。如果超類變量是靜態的,它可以工作,但是循環值不會被正確採用。
我的代碼:
public class App {
public String var ;
public static void main(String[] args) {
App ap = new App();
ap.fromt();
}
public void fromt() {
Sub s = new Sub();
for(int i = 0; i <= 5; i++) {
var = "Test" + i;
System.out.println("Hello World!" + var);
s.testtt();
}
}
}
//**Inherited Class**//
public class Sub extends App {
public void testtt() {
String var2 = super.var;
System.out.println("Hello World! Subclass" + var2);
}
}
輸出:
Hello World!Test0
Hello World! Subclassnull
Hello World!Test1
Hello World! Subclassnull
Hello World!Test2
Hello World! Subclassnull
Hello World!Test3
Hello World! Subclassnull
Hello World!Test4
Hello World! Subclassnull
Hello World!Test5
Hello World! Subclassnull
我不是java的專家......但你必須使用'this'關鍵字來使它工作。例如'this.var =「Test」+ i;'而不是'var =「Test」+ i;' –
在調用's.testtt()'之前,您沒有將var設置爲任何值。可能你想這樣做,'s.var =「Test」+ i;' – Codebender
因爲在你的App類中,你還沒有定義var。當你調用你的Sub構造函數時,它將採用該未定義的變量。在靜態情況下,由於所有聲明的對象都共享相同的靜態變量,所以一旦您稍後定義變量,則從該類構造的所有其他對象都可以使用該變量 – SerMintt