2016-09-01 32 views
2

我是JAVA/Android編程的新手,並且有一個小問題。在子類中初始化超類數組(java)

我在超類中創建了一個數組,並且想要在多個子類中初始化它。但是當我嘗試初始化它時,它說這是不可能的。

我的代碼:

public abstract class Fragen { 

String[] Deutsch; 
String[] Slowakisch; 

static int Anzahl; 
Random random; 
int randNumber; 

byte Fächer; 

public String displayQuestion() 
{ 

    //TODO Fach abfragen 
    randNumber = random.nextInt(Anzahl); 

    return Slowakisch[randNumber]; 

} 

public boolean correctAnswer(String answer) 
{ 
    //TODO Fächer +/- 

    if(answer.equals(Deutsch[randNumber])) 
     return true; 

    else 
     return false; 
} 
} 

(超類)

public class Lektion1 extends Fragen 
{ 
    private Lektion1() 
    { 
     super(); 
     Anzahl = 60; 
     //Deutsch = new String[]; 
     Deutsch = {"",""}; 
     Slowakisch = {"",""}; 
    } 
} 

(子類)

親切的問候 托馬斯

+0

請發佈確切的錯誤 –

+0

幫你一個忙,避免擺弄陣列 - 這是1990年的!改用'ArrayList '來代替! –

+0

@Gyro他說他是編程新手,讓他學會正確理解內存使用情況!不像一些不知道內存是什麼的新程序員! – lionscribe

回答

1

試試這個:

public class Lektion1 extends Fragen 
{ 
    private Lektion1() 
    { 
     super(); 
     Anzahl = 60; 
     //Deutsch = new String[]; 
     Deutsch = new String[]{"", ""}; 
     Slowakisch = new String[]{"", ""}; 
    } 
} 
0

在你的超類只需創建一個構造函數和初始化數組有:

public abstract class Fragen { 
    ... 
    public Fragen() { 
     Deutsch = new String[]; 
    } 
    ... 
} 

替代

,或者如果你的領域有適當的訪問修飾符,那麼你也可以訪問它們使用super關鍵字

public abstract class Fragen { 
    public String[] Deutsch; 
    ... 
    ... 
} 

和基類:

public class Lektion1 extends Fragen { 
    private Lektion1() 
    { 
     super(); 
     Anzahl = 60; 
     super.Deutsch = new String[]; 
     Deutsch = {"",""}; 
     Slowakisch = {"",""}; 
    } 
} 
+0

在超類中,您不知道數組需要多長時間,所以沒有必要在沒有來自子類的輸入的情況下實例化它們。無論你想把'super.'放在'Deutsch'前面,都是品味的事情 - 它沒有或沒有它。 –

-1

編輯:對於conrete回答您的具體問題,@ MrQuattro的答案當然是正確的,充實的。

這就是說,如果你想了解更多面向對象的設計,我仍然喜歡我最初的答案。你當然可以扔掉或使用,因爲你認爲合適:我建議將德語和斯洛伐克語單詞放在一起會更方便,所以我會讓一個類Frage在一個單詞(或短語或表達式)中保留兩種語言。

接下來我想在Fragen中構造一個接受所有Frage對象的構造函數,例如作爲可變參數(您應該瞭解這些)。這將允許Lektion1構造函數只包含

super(new Frage("", ""), new Frage("", ""), new Frage("", "")); 

Fragen可以指望,所以你並不需要:父類的構造將設置anzahl(請使用小寫a一個變量)來接收問題的數量。

如果你想更進一步,Frage類也可以負責檢查答案是否正確。