我有一个这样的超类,我期望很多类继承:
public abstract class Super {
protected Object myField; //Not used anywhere in this class
//a load more code here which does useful stuff
}
Run Code Online (Sandbox Code Playgroud)
所有这些类都需要使用一个实例myField.但是超类没有.我在某个地方做出了糟糕的设计决定吗?
不必要.如果所有子类出于同样的原因需要相同的字段,那么这与在基类中提供任何其他常用功能没有什么不同.随着类的增长,您可能会发现添加使用此字段的常用功能(例如,在equals/hashCode方法中引用它).
现在,如果字段是Object类型,并且每个子类都将完全不同的东西推入其中,我会认为代码有异味.
恕我直言,如果一个字段不在该类中,那么该字段不应出现在该类中.在我看来你真正想要的是有一个基类告诉它的子类"你应该有一些方法来保持X的状态,但我(基类)不会修改那个X状态,在这种情况下你应该使用抽象方法来传达该消息,如下所示:
public abstract class Super {
protected abstract Object getMyField();
}
Run Code Online (Sandbox Code Playgroud)