【问题标题】:Override a method from library to different projects将库中的方法覆盖到不同的项目
【发布时间】:2013-03-12 17:48:57
【问题描述】:

我将我的主要代码设置为一个项目,其他两个项目(精简版和专业版)引用它。

这就是我希望 Quiz 类查找 lite 的方式:

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 示例,然后尝试在专业版中以某种方式覆盖它?

编辑

根据下面的评论,这里是实际代码的 sn-p。

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"));
}

【问题讨论】:

  • 代码不是很清楚。 “public Quiz {”实际上是指构造函数吗? (public Quiz() {) 并且您正在该构造函数中初始化不同的对象?
  • 我添加了实际代码的 sn-p 以帮助澄清。在实际的 Quiz 类中,大约有 500 个 Question 对象。

标签: java android eclipse shared-libraries overriding


【解决方案1】:

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

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

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

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

更新: 查看 sn-p 您正在使用构造函数添加问题,这将是一个不好的地方。

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

【讨论】:

  • 所以如果我理解正确,我可以在我的库中定义Quiz 类,我希望我的精简版看起来像,然后在我的专业版中我可以扩展Quiz,调用@ 987654327@ 并添加更多对象。这样我的精简项目就不必添加任何东西了。听起来对吗?我会去整合它并报告结果。
  • 是的,这似乎是正确的。你的问题对我来说并不完全清楚,所以不得不假设一些细节。但这似乎是对的。
  • 它要求导入 import matt.lyons.bibletrivia.Question;import matt.lyons.bibletrivia.Quiz; 以使其编译。我假设这样做可以吗?
  • 是的,需要导入才能编译类。去做。而且您可能还应该阅读一些基本的 Java 教程。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2019-06-08
    • 2019-10-02
    相关资源
    最近更新 更多