2014-03-29 212 views
0

我有一個泛型類,它聲明某些字段和一個構造函數,可與他們:Java繼承:隱藏字段

public abstract class GenericClass extends JFrame 
{ 
    protected static String FIELD_1; 
    protected static String FIELD_2; 
    protected static String FIELD_3; 

    public GenericClass() 
    { 
     super(FIELD_1+" "+FIELD_2+FIELD_3); 
    } 
} 

類和子類應該隱藏字段和使用超類的構造函數:

public class ChildClass1 
{ 
    protected static String FIELD_1 = "hello"; 
    protected static String FIELD_2 = "world"; 
    protected static String FIELD_3 = "!"; 

    public ChildClass 
    { 
     super(); 
    } 
} 
public class ChildClass2 
{ 
    protected static String FIELD_1 = "another"; 
    protected static String FIELD_2 = "class"; 
    protected static String FIELD_3 = "!"; 

    public ChildClass 
    { 
     super(); 
    } 
} 

我不明白爲什麼創建的JFrames有標題null nullnull。我究竟做錯了什麼?

更新

使用這些類的很簡單:

public class Main 
{ 

    public static void main(final String[] args) 
    { 
     new ChildClass1(); 
     new ChildClass2(); 
    } 
} 
+0

您已經列出了三個類,但沒有使用它們的代碼。你如何使用這些類? – Rajit

+1

另請參見:[覆蓋超類'實例變量](http://stackoverflow.com/questions/427756/overriding-a-super-class-instance-variables) – Rajit

+0

@Rajit雖然這與我的問題無關,請參閱update –

回答

1

因爲GenericClassnull值的FIELD_1FIELD_2FIELD_3

public abstract class GenericClass extends JFrame 
{ 
    protected static String FIELD_1; 
    protected static String FIELD_2; 
    protected static String FIELD_3; 

    public GenericClass() 
    { // null +" " +null+null = `null nullnull` 
     super(FIELD_1+" "+FIELD_2+FIELD_3); 
    } 
} 

該W作爲想法:GenericClass應該只是DECLARE字段和子類應該初始化它們。 - Danylo Esterman 41秒前

你不能有這樣的說法對田,你需要重載抽象類的構造函數和力的子類(通過隱藏默認構造函數)來傳遞構造函數中的參數,然後使用這些傳遞的參數對於JFrame的構造函數

+0

這是這個想法:'GenericClass'應該只是DECLARE字段,並且子類應該使用特定於類的值來初始化它們。 –

+0