从 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表示XY

的超class

其他答案都提到了接口。我假设您已经将您的行为分组到有意义的界面中。这个答案解决了具体的 classes 将如何相互关联。