0
我的代碼是這樣的hi.using超級延長
public class B {
public B(int f) {
}
}
public class A extends B{
int f=4;
public A() {
super(f);
}
}
爲什麼它使一個編譯錯誤?
我的代碼是這樣的hi.using超級延長
public class B {
public B(int f) {
}
}
public class A extends B{
int f=4;
public A() {
super(f);
}
}
爲什麼它使一個編譯錯誤?
爲了創建類A的一個實例,Java將表現得好像它先行創建B的一個實例,這意味着將調用超類super()的構造函數(或者在這個你可以自己調用它),然後然後「添加」類A的屬性。 這也是爲什麼super()調用總是必須成爲構造函數中的第一條指令的原因。
您試圖傳遞一個參數,這個參數在某種意義上還不存在,因爲您嘗試讀取f 之前調用super()的那個參數。
你可以做的是:
public class A extends B {
static final int F_CONST = 4;
int f = F_CONST;
public A() {
super(F_CONST);
}
}
這裏F_CONST是恆定的「靜態」變量,這是一個「類變量」,而不是「對象或實例變量」。當類加載到內存中時,靜態成員將被初始化,這是在調用任何構造函數之前。編譯器甚至可以直接用值4替換F_CONST,這也是一個簡單的解決方案。