所以我有以下继承结构: 超级A 有一堆子类B,C ...... Z
我需要将两个字段及其相应的getter / setter添加到一些子类中,例如B,C .... Q,所以大约有一半的子类。
我的困境是,如果我将字段添加到每个子类中,那将非常枯燥乏味。由于重复的代码,它看起来很臭。
但是如果我将字段添加到超类A,它将使R .... Z中的其他子类不需要具有两个字段的字段。我认为这是多余的。
那么哪个选项更好?
答案 0 :(得分:2)
创建一个中间类Foo
,它扩展A
并包含新字段,以及setter和getter。让您的B,C....Q
课程延长Foo
而不是A
。
A -> Foo -> B A -> Foo -> C ... A -> R A -> S ...
其中X -> Y
表示X
是Y
的超类
其他答案提到接口。我假设您已经将您的行为分组到有意义的界面中。这个答案解决了具体类如何相互关联的问题。
答案 1 :(得分:1)
根据SOLID原则,更具体地说, 接口隔离原则 :
"许多特定于客户端的接口优于一个通用接口。"
因此,基本上创建多个接口来表示域模型的某些方面,并让您的类选择要实现的那些。这样,您就不会强制所有类来实现他们不需要的方法。
interface Item{
String getName();
}
interface Washable{
void wash();
}
interface Drivable{
void drive();
}
interface Cookable{
void cook();
}
class Car implements Item, Washable, Drivable{
String getName();
void wash();
void drive();
}
class Potato implements Item, Washable, Cookable{
String getName();
void wash();
void cook();
}