2016-09-01 31 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类也可以负责检查答案是否正确。