0

我将我的主要代码设置为一个项目,其他两个项目(lite 和 pro)引用它。

这就是我希望Quiz班级寻找精简版的方式:

class Quiz {
    public Quiz {
        object1();
        object2();
        object3();
        object4();
    }
}

这就是我希望Quiz班级寻找专业人士的方式:

class Quiz {
    public Quiz {
        object1();
        object2();
        object3();
        object4();
        object5();
        object6();
        object7();
        object8();
    }
}

要做到这一点,我是否需要Quiz在库中将类设置为抽象,然后在 lite 和 pro 项目中定义它们?或者我应该将库定义为Quiz上面的第一个示例,然后尝试在专业版中以某种方式覆盖它?

编辑

根据下面的评论,这里是实际代码的片段。

public class Quiz {

    ArrayList<Question> exodus = new ArrayList<Question>(200);

    public Quiz() {

        exodus.add(new Question("Aaron", "Abraham", "Jacob", "Joseph", 0, "What was the name of Moses' brother?", -1, "Exodus 7:1-2"));
        exodus.add(new Question("5", "10", "7", "12", 1, "How many plagues did God send on Egypt?", -1, "Exodus 7-12"));
        exodus.add(new Question("Pharaoh's maid", "Pharaoh's wife", "Pharaoh's daughter", "Pharaoh's mother", 2, "Who found baby Moses in a basket along the riverside of the Nile river?", -1, "Exodus 2:3-5"));
        exodus.add(new Question("Hail", "Frogs", "Boils", "Flies", 1, "What was the 2nd plague?", -1, "Exodus 8:2"));
        exodus.add(new Question("Darkness for 3 days", "All water turns to blood", "Boils", "Flies", 3, "What was the 4th plague?", -1, "Exodus 8:24"));
        exodus.add(new Question("Frogs", "Boils", "Hail", "Lice", 1, "What was the 6th plague?", -1, "Exodus 9:10"));
        exodus.add(new Question("Boils", "All livestock dies", "Lice", "Locusts", 3, "What was the 8th plague?", -1, "Exodus 10:14"));
        exodus.add(new Question("Darkness for 3 days", "Death of firstborn", "All water turns to blood", "All livestock dies", 1, "What was the 10th plague?", -1, "Exodus 12:29"));
}
4

2 回答 2

2

假设您指的是构造函数,因为问题尚不清楚

class Quiz {
    public Quiz (){
        object1();
        object2();
        object3();
        object4();
    }
}

class QuizForPro extends Quiz{
    public QuizForPro() {
        super();
        object5();
        object6();
        object7();
        object8();
    }
}

您可以Quiz在其他库中扩展Pro,然后提供对您的库有意义的更专业的实现。这就是为什么在 OOP 中可以使用专业化,以便您可以扩展父类功能并提供一些额外的行为(在您的情况下是在 arraylist 中添加更多元素)。

更新: 查看您使用构造函数添加问题的代码段,这将是一个不好的地方。

您应该提供类似的方法addQuestion(...), removeQuestion(...), clearQuestions(...)。这些在这里会更有意义。

于 2013-03-12T17:57:43.477 回答
1

同意纳伦德拉的回答,它应该工作。但是我想下面的设计应该就足够了。{再次取决于最终产品的实际要求}

测验作为具有数组列表定义的类来存储数据,但在构造函数中没有初始化。它提供了添加一堆问题的方法。

public final class Quiz {
  ArrayList<Question> exodus = new ArrayList<Question>(200);
  public Quiz() { }
  public addQuestions(List<Question> questions) {
     // ... implementation here ... 
  }
}

我将把 lite 和 pro 作为客户端类中的成员初始化,或者提供一个 QuizHelper 类来创建这两种类型的对象并返回它。

于 2013-03-12T18:15:11.830 回答