2012-04-01 77 views
0

我的代碼是這樣的hi.using超級延長

public class B { 
    public B(int f) { 

    } 

} 


public class A extends B{ 

    int f=4; 
    public A() { 
     super(f); 
    } 

} 

爲什麼它使一個編譯錯誤?

回答

0

爲了創建類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,這也是一個簡單的解決方案。