public abstract class SoftwareComponent {
private Set<Information> generateInfo = new HashSet<Information>();
private Set<Information> consumeInfo = new HashSet<Information>();
public Set<Infomation> getGeneratedInfo() { ... }
public Set<Information> getConsumedInfo() {....}
}
public class SensorDriver extends SoftwareComponent {
}
public class Information { ... }
public class SensorMeasurement extends Information { }
public class command extends Information { }
上面提到的代码是我的程序结构。现在,情况是传感器驱动程序继承 它的所有父类方法。我想限制传感器驱动程序中重写方法的范围。
限制是 “传感器驱动程序”只能生成“传感器测量”信息。 “传感器驱动程序”不允许使用“命令”信息。
答案 0 :(得分:2)
您可以使SoftwareComponent成为通用的,并将信息作为参数:
public abstract class SoftwareComponent<I extends Information> {
private Set<I> generateInfo = new HashSet<I>();
private Set<I> consumeInfo = new HashSet<I>();
public Set<I> getGeneratedInfo() { ... }
public Set<I> getConsumedInfo() {....}
}
public class SensorDriver extends SoftwareComponent<SensorMeasurement> {
}
答案 1 :(得分:0)
每当你将单一继承视为答案时,你可能会遇到问题。我认为你实际上想要使用多重继承(以接口的形式)。您应该考虑声明允许您执行某些操作的接口,也可以考虑实现某些将逻辑类“组合”在一起的接口的抽象类。
作为一般的经验法则,如果B是A,它将继承所有A.但是如果B是除了x,y和z之外的A,你可以抛出UnsupportedOperationException,这在某些情况下是可以接受的,但是你应该考虑重新构建你的层次结构,这样才会更有意义。