在子类中初始化超类数组(java)

问题描述 投票:0回答:3

我是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 = {"",""};
    }
}

(子类)

java android arrays oop
3个回答
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
投票

编辑:对于您的具体问题的具体答案,@MrQuattro 的答案当然是正确且令人满意的。

也就是说,如果你想了解更多面向对象设计的知识,我自己仍然喜欢我原来答案中的想法。你当然可以扔掉或使用你认为合适的东西:我建议将德语和斯洛伐克语单词放在一起会更方便,所以我会创建一个类

Frage
来保存一个单词(或短语或表达) )两种语言。

接下来我想在

Fragen
中创建一个构造函数,它接受所有
Frage
对象,例如作为可变参数(你应该了解这些)。这将允许
Lektion1
构造函数仅包含

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

Fragen
可以计数,所以你不需要:超类构造函数会将
anzahl
(请使用小写
a
作为变量)设置为收到的问题数。

如果你想更进一步,

Frage
类也可以被赋予检查答案是否正确的责任。

链接: 反模式:并行集合

© www.soinside.com 2019 - 2024. All rights reserved.