Java OOP 多态/子类

标签 java oop polymorphism

我在练习时遇到了一些困难。我想将 question1question2 保存在 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/

相关文章:

java - 是否有 jarsigner 的纯 java 或独立可部署实现?

java - 从 java PDFBOX 获取违规行为

java - 使用 Math 类而不实例化它

java - 游戏中的多人游戏。如何明智地设计它?

c++ - 我可以覆盖运算符的重载并返回不同的类型吗?

c# - 覆盖接口(interface)的返回类型

Java 字节和浮点乘法

java - 有谁知道查看 Java 应用程序内存的应用程序?或者有一些简单的方法来创建一个应用程序来做这种事情?在 C# 中

c++ - 在这种情况下,我应该/如何避免垂头丧气?

ruby-on-rails - 验证多态亲本的存在