有 10 个类有方法 orderId()
,2 个没有。
所有消息都是名为 Message
的类的子类。
父类是否仍Messages
具有在一个位置实现该逻辑的setOrderId(String value)
方法?
我的问题是,如果我不这样做,那么我将不得不使用具体的类来使用该方法!
如果你在公共超类上实现setOrderId()
,那么结果,所有子类都具有该属性(即使有些子类不提供getter)。 如果这是不合适/不合适的,那么不,这不是好的设计。
我的问题是,如果我不这样做,那么每次我想使用该方法时,如果编程到接口,我都需要子类化!
也许您需要一个大多数子类实现的接口,或者为它们提供一个中间超类,它提供setOrderId()
方法,并且可能也orderId()
。 将对象传递给希望能够访问 orderId
属性的方法时,请使用将其作为参数类型提供的公共接口或类。
创建具有所有常用方法的抽象类(AbstractMessage),创建具有orderId()方法的子类(OrderMessage),创建另一个没有此方法的子类(Message)。
您可以在父类中实现 setOrderld(),然后在没有 setOrderld() 的对象中重写该方法以不执行任何操作。然后,您必须记住覆盖不使用它的对象。
可以具有默认的 setOrderId(String value)
方法,如有必要,任何子类都可以重写或扩展该方法。例如:
class Message {
String orderId;
public void setOrderId(String orderId) {
this.orderId = orderId;
}
}
然后,您可以根据需要多次对其进行子类化:
class RestrictedMessage {
@Override
public void setOrderId(String orderId) {
if (orderId.length > 0) {
super.setOrderId(orderId);
}
}
}
这样,您可以覆盖但仍使用原始功能(如果需要)。