abstract class 变量 vs subclass 变量,哪个更好
Abstract class variable vs subclass variable, which is better
背景:
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 { ...};
这里假设所有的动物都有房子。每只动物只会住在它特定的房子里。我只想问一下这个变量放在哪个地方(abstractclass还是subclass)比较好
问题:
如果我想为 Dog 添加一个 DogHouse 变量,以下哪个选项最好 class?
====选项 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();
}
}
这取决于您打算如何模拟您的情况。这里有一些建议:
如果所有的动物都要有房子,那么给superclass添加一个House
属性是有意义的。这确保该属性可用于所有 subclasses,无论它是哪个房子。这适用于您描述的模型。
如果只有一种特定的动物要有房子,那么像 (1) 中那样给所有动物房子是没有意义的。那么您必须只向 class 提供该属性,例如 class Dog
中的 DogHouse
。
总之,您的选项 3 更适合。
背景:
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 { ...};
这里假设所有的动物都有房子。每只动物只会住在它特定的房子里。我只想问一下这个变量放在哪个地方(abstractclass还是subclass)比较好
问题:
如果我想为 Dog 添加一个 DogHouse 变量,以下哪个选项最好 class?
====选项 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();
}
}
这取决于您打算如何模拟您的情况。这里有一些建议:
如果所有的动物都要有房子,那么给superclass添加一个
House
属性是有意义的。这确保该属性可用于所有 subclasses,无论它是哪个房子。这适用于您描述的模型。如果只有一种特定的动物要有房子,那么像 (1) 中那样给所有动物房子是没有意义的。那么您必须只向 class 提供该属性,例如 class
Dog
中的DogHouse
。
总之,您的选项 3 更适合。