Java 抽象类变量和子类变量,哪个更好

Java 抽象类变量和子类变量,哪个更好,java,class,variables,interface,abstract,Java,Class,Variables,Interface,Abstract,背景: 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 implem

背景:

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 { ...};
这里假设所有动物都有房子。每只动物只会生活在它特定的房子里。我只是想问一下,哪个位置(抽象类或子类)更适合放置这个变量

问题:

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

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

  • 如果所有动物都有一个房子,那么向超类添加
    house
    属性是有意义的。这确保了该属性可用于所有子类,而不管它是哪个房屋。这适用于您描述的模型

  • 如果只有一种特定的动物有一个房子,那么按照(1)给所有动物提供房子是没有意义的。然后,您必须仅为该类提供该属性,例如,在类
    Dog
    中的
    DogHouse


  • 总之,你的选择3会更合适

    这取决于,如果所有的动物都有房子,如果一只狗可以住在一个象形寓所或类似的地方。。。因此,我们对你想要达到的目标知之甚少。嗨,朱利安。你的问题没有正确的答案;它主要是基于意见的。因此,它用于堆栈溢出。是。这里假设所有动物都有房子。每只动物只会生活在它特定的房子里。我只想问哪个位置(抽象类或子类)更适合放置此变量。请将此信息添加到您的问题(编辑),不要在注释中提供。