2016-09-01 6 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

スーパークラスでは配列の長さがわからないので、サブクラスからの入力なしでインスタンス化する必要はありません。 'Deutsch 'の前に' super'を置くかどうかは、好みの問題です。 –

-1

編集:あなたの具体的な質問への答えconreteについては、@ MrQuattroの答えは、もちろん正しいと充実しています。

つまり、オブジェクト指向設計の詳細を知りたいのであれば、私はまだ自分の元の答えのアイデアが好きです。あなたはもちろん、捨てることも、適切に使うこともできます:私は、ドイツ語とスロバキア語の単語をまとめるほうが便利だと提案しているので、クラスFrageに1語(またはフレーズまたは表現)を入れる両方の言語。

次に、Frageオブジェクトをすべて受け入れるFragenのコンストラクタを作成したいと思います。たとえば、varargsなどです(これらについては学ぶ必要があります)。これはLektion1コンストラクタはちょうど

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

Fragenを含めることができますあなたがする必要はありませんので、カウントすることができます:スーパークラスのコンストラクタは、受け取った質問の数に(変数の小文字aを使用してください)anzahlを設定します。

さらに進んだ場合、Frageクラスには、答えが正しいかどうかをチェックする責任も与えられます。

関連する問題