从 super class 继承字段还是在 sub classes 中写入字段?
Inherit fields from super class or write fields in sub classes?
所以我有如下的继承结构:
超级class A有一堆子classes B,C...Z
并且我需要将两个字段及其对应的getters/setters添加到Some子classes中,比如B,C....Q,所以大约一半的子 classes.
我的困境是,如果我将字段添加到每个子 class,那将非常无聊和乏味。由于代码重复,它看起来很臭。
但是如果我将这些字段添加到 super class A,它将使来自 R....Z 的其他子 classes 不需要具有这两个字段的字段.我认为是多余的。
那么哪个选项更好呢?
根据 SOLID 原则,更具体地说,接口隔离原则 :
"many client-specific interfaces are better than one general-purpose interface."
因此,基本上创建多个接口来表示域模型的某些方面,并让您的类选择要实现的接口。这样你就不会强制你所有的类去实现他们不需要的方法。
示例
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();
}
创建一个中间体 class、Foo
,它扩展了 A
并包含新字段以及 setter 和 getter。让你的 B,C....Q
classes 扩展 Foo
而不是 A
.
A -> Foo -> B
A -> Foo -> C
...
A -> R
A -> S
...
其中X -> Y
表示X
是Y
的超class
其他答案都提到了接口。我假设您已经将您的行为分组到有意义的界面中。这个答案解决了具体的 classes 将如何相互关联。
所以我有如下的继承结构: 超级class A有一堆子classes B,C...Z
并且我需要将两个字段及其对应的getters/setters添加到Some子classes中,比如B,C....Q,所以大约一半的子 classes.
我的困境是,如果我将字段添加到每个子 class,那将非常无聊和乏味。由于代码重复,它看起来很臭。
但是如果我将这些字段添加到 super class A,它将使来自 R....Z 的其他子 classes 不需要具有这两个字段的字段.我认为是多余的。
那么哪个选项更好呢?
根据 SOLID 原则,更具体地说,接口隔离原则 :
"many client-specific interfaces are better than one general-purpose interface."
因此,基本上创建多个接口来表示域模型的某些方面,并让您的类选择要实现的接口。这样你就不会强制你所有的类去实现他们不需要的方法。
示例
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();
}
创建一个中间体 class、Foo
,它扩展了 A
并包含新字段以及 setter 和 getter。让你的 B,C....Q
classes 扩展 Foo
而不是 A
.
A -> Foo -> B A -> Foo -> C ... A -> R A -> S ...
其中X -> Y
表示X
是Y
其他答案都提到了接口。我假设您已经将您的行为分组到有意义的界面中。这个答案解决了具体的 classes 将如何相互关联。