背景
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();
}
}
答案 0 :(得分:0)
这取决于您计划如何建模您的情况。以下是一些建议:
如果所有动物都有房子,那么在超类中添加House
属性是有意义的。这确保了属性可用于所有子类,而不管它是哪个房子。这适用于您描述的模型。
如果只有一只特定的动物要有房子,那么按照(1)给所有动物房屋是没有意义的。然后,您必须仅向该类提供该属性,例如DogHouse
中的Dog
。
总而言之,您的选项3将更适合。