我在练习时遇到了一些困难。我想将 question1
和 question2
保存在 addQuestion
方法中。但我不知道如何访问 f
并将其添加到可访问的内容中。在我的教科书中,他们告诉我们应该用多态性来做到这一点。当我启动调试器时,我看到当调用 q.addQuestion
时,有一个属性 f
包含我需要的字段。但我怎样才能保存它们供以后使用呢?我的第一个想法是我可以使用 ArrayList 来做到这一点,但我不能使用任何导入(这是教科书中的规则)。
可能我对多态性的理解不正确。
public class something{
public static void main(String[] args) {
Quiz q = new Quiz(2);
q.addQuestion(new question1("SomeText",5,157,5));
q.addQuestion(new question2("SomeText",5,157,5,123));
...
}
}
public class Quiz {
int myNumQuestions;
Quiz[] quizQuestion;
Quiz(int numQuestions){
this.myNumQuestions = numQuestions;
quizQuestion = new Quiz[myNumQuestions];
}
public boolean addQuestion(Interface f){
quizQuestion = new f(); //that does not work but how can I access the field from f?
}
问候。
编辑:
我稍微改变了我的公共(public)类Quiz
,现在我可以分配f
MyInterfaceName[] = quizQuestion;
Quiz(int numQuestions){
this.myNumQuestions = numQuestions;
quizQuestion = new Quiz[myNumQuestions];
}
public boolean addQuestion(Interface f){
quizQuestion[mycounter++] = f;
}
最佳答案
您的类测验包含一个用于问题
引用的数组。所以:问题
应该是 interface (其他类只需实现);或者它可以是一个(抽象)base class它会通过您的 Q1、Q2... 类进行扩展。
因此,将类型从“interface”更改为 Question 并将传入对象放入数组中。您必须跟踪数组中的空闲槽。
换句话说:您希望您的Quiz
类像一个盒子一样工作;您可以将问题
内容放入该框中。现在您只需决定 Question
是否应该是一个接口(interface)(没有任何具体的实现);或者类的层次结构是否效果更好。
就是这样。请参阅here供进一步阅读。
关于Java OOP 多态/子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44214426/