【问题标题】:Abstract class variable vs subclass variable, which is better抽象类变量 vs 子类变量,哪个更好
【发布时间】:2018-02-05 22:30:53
【问题描述】:

背景:

Abstract class Animal {

  void sleep () { //implementation details.... }

  abstract void bark();
};

Class Dog extends Animal {};
Class Cat extends Animal {};

Interface House {...};
Class DogHouse implements House { ...};
Class CatHouse implements House { ...};

这里假设所有动物都有房子。每只动物只会住在它特定的房子里。我只是想问一下这个变量放在哪个地方(抽象类还是子类)比较好。

问题:

如果我想为 Dog 类添加 DogHouse 变量,以下哪个选项最好?

====选项1 ====

public Class Dog extends Animal {
    DogHouse dogHouse = new DogHouse();
    ...
}

====选项2 ====

public Class Dog extends Animal{
    House house = new DogHouse();
    ....
}

====选项3 ====

Abstract class Animal {
    House House;

    void sleep () {... }

    abstract void bark();
}


public Class Dog extends Animal{
   Dog() {
     house = new DogHouse();
   }
}

【问题讨论】:

  • 这取决于,如果所有动物都有房子,以及狗是否可以住在ElephantHouse 或类似的地方...因此,我们对您想要实现的目标知之甚少。
  • 嗨,朱利安。您的问题没有正确答案;它主要是基于意见的。因此,对于 Stack Overflow,它是 off-topic
  • 是的。这里假设所有动物都有房子。每只动物只会住在它特定的房子里。我只是想问一下这个变量放在哪个地方(抽象类还是子类)比较好。
  • 请将此信息添加到您的问题中(编辑),不要在 cmets 中提供。

标签: java class variables interface abstract


【解决方案1】:

这取决于您计划如何模拟您的情况。以下是一些建议:

  1. 如果所有动物都有房子,那么将House 属性添加到超类是有意义的。这确保了该属性对所有子类都可用,而不管它是哪个房子。这适用于您描述的模型。

  2. 如果只有一种特定的动物有房子,那么像 (1) 中那样给所有动物房子是没有意义的。然后您必须只将该属性提供给该类,例如 Dog 类中的 DogHouse

因此,总而言之,您的选项 3 将更适合。

【讨论】:

    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    相关资源
    最近更新 更多