2016-09-01 3 views
2

Ich bin neu in JAVA/Android-Programmierung und habe ein kleines Problem.initialisieren Superklassen-Array in Unterklasse (Java)

Ich habe in einer Superklasse ein Array erstellt und wollte es in mehreren Unterklassen initialisieren. Aber wenn ich versuche, es zu initialisieren, sagt es, dass es nicht möglich ist.

Mein Code:

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; 
} 
} 

(Oberklasse)

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

(Subclass)

Mit freundlichen Grüßen Thomas

+0

Bitte geben Sie den exakten Fehler –

+0

Tun Sie sich selbst einen Gefallen und vermeiden Sie das Hantieren mit Arrays - das ist so 1990! Verwenden Sie stattdessen 'ArrayList ' statt! –

+0

@Gyro Er sagt, er ist neu in der Programmierung, lass ihn lernen, den Speicherverbrauch richtig zu verstehen! Nicht wie einige neue Programmierer, die nicht wissen, was Speicher ist! – lionscribe

Antwort

1

Try this:

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

einfach einen Konstruktor in Ihrer Superklasse erstellen und das Array initialisieren es:

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

alternative

oder wenn Ihre Felder entsprechenden Zugriffsmodifikatoren haben, dann können Sie auch Greifen Sie auf sie unter Verwendung super Stichwort

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

und in der Basisklasse:

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

In der Oberklasse wissen Sie nicht, wie lange Arrays benötigt werden, daher ist es sinnlos, sie ohne Eingabe aus der Unterklasse zu instanziieren. Ob man "Super" vor 'Deutsch' stellen will, ist Geschmackssache - es geht ohne und mit ihm. –

-1

Edit: Für eine conrete Antwort auf Ihre konkrete Frage, @ Antwort MrQuattro das ist natürlich richtig und erfüllend.

Das heißt, wenn Sie mehr von objektorientiertem Design lernen wollen, mag ich noch selbst die Ideen aus meiner ursprünglichen Antwort. Sie können natürlich wegwerfen oder verwenden, wie Sie für richtig halten: Ich schlage vor, dass es bequemer ist, das deutsche und slowakische Wort zusammen zu halten, also würde ich eine Klasse Frage machen, um ein Wort (oder Ausdruck oder Ausdruck) darin zu halten beide Sprachen.

Als nächstes würde ich einen Konstruktor in Fragen machen, der alle Frage Objekte akzeptiert, zum Beispiel als varargs (Sie sollten darüber lernen). Dies wird der Lektion1 Konstruktor erlauben nur

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

Fragen zählen kann, enthalten, so dass Sie nicht brauchen: Basisklassenkonstruktor gesetzt wird anzahl (bitte für eine Variable verwenden Klein a) auf die Anzahl der Fragen erhalten.

Wenn Sie noch einen Schritt weiter gehen wollen, könnte die Klasse Frage auch die Verantwortung übernehmen, zu prüfen, ob eine Antwort richtig ist.

Verwandte Themen