从超类继承字段或在子类中写入字段?

时间:2015-03-26 14:27:14

标签: java inheritance optimization

所以我有以下继承结构: 超级A 有一堆子类B,C ...... Z

我需要将两个字段及其相应的getter / setter添加到一些子类中,例如B,C .... Q,所以大约有一半的子类。

我的困境是,如果我将字段添加到每个子类中,那将非常枯燥乏味。由于重复的代码,它看起来很臭。

但是如果我将字段添加到超类A,它将使R .... Z中的其他子类不需要具有两个字段的字段。我认为这是多余的。

那么哪个选项更好?

2 个答案:

答案 0 :(得分:2)

创建一个中间类Foo,它扩展A并包含新字段,以及setter和getter。让您的B,C....Q课程延长Foo而不是A

A -> Foo -> B
A -> Foo -> C
...
A -> R
A -> S
...

其中X -> Y表示XY的超类

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

答案 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();
}