我是JAVA / Android编程新手,有一个小问题。
我在超类中创建了一个数组,并想在多个子类中初始化它。但是当我尝试初始化它时,它说这是不可能的。
我的代码:
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 = {"",""};
}
}
(子类)
试试这个:
public class Lektion1 extends Fragen
{
private Lektion1()
{
super();
Anzahl = 60;
//Deutsch = new String[];
Deutsch = new String[]{"", ""};
Slowakisch = new String[]{"", ""};
}
}
只需在您的超类中创建一个构造函数并在那里初始化该数组:
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 = {"",""};
}
}
编辑:对于您的具体问题的具体答案,@MrQuattro 的答案当然是正确且令人满意的。
也就是说,如果你想了解更多面向对象设计的知识,我自己仍然喜欢我原来答案中的想法。你当然可以扔掉或使用你认为合适的东西:我建议将德语和斯洛伐克语单词放在一起会更方便,所以我会创建一个类
Frage
来保存一个单词(或短语或表达) )两种语言。
接下来我想在
Fragen
中创建一个构造函数,它接受所有 Frage
对象,例如作为可变参数(你应该了解这些)。这将允许 Lektion1
构造函数仅包含
super(new Frage("", ""), new Frage("", ""), new Frage("", ""));
Fragen
可以计数,所以你不需要:超类构造函数会将anzahl
(请使用小写a
作为变量)设置为收到的问题数。
如果你想更进一步,
Frage
类也可以被赋予检查答案是否正确的责任。
链接: 反模式:并行集合