在Java继承中限制重写方法的范围
问题描述:
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 { }
上面提到的代码是我的程序结构。现在,情况是传感器驱动程序继承其所有父类方法 。我想限制传感器驱动程序中覆盖的方法的范围。在Java继承中限制重写方法的范围
限制为 “传感器驱动程序”只能生成“传感器测量”信息。 “传感器驱动程序”不允许使用“命令”信息。
答
你可以让你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> {
}
答
任何你看单继承的答案时,你可能会遇到的问题。我想你实际上想要使用多重继承(以接口的形式)。您应该考虑声明允许您执行某些操作的接口,或者实现某些将逻辑类“组合”在一起的接口的抽象类。
作为一般的经验法则,如果B是A,它将继承A的全部。但是如果B除了x,y和z之外是A,则可以抛出一个UnsupportedOperationException,在某些情况下可以接受,但你应该真的考虑重构你的层次结构,所以这一切更有意义。
你不能。这会打破继承的概念。基类可以做的任何事情,你的子类需要尊重。 – 2012-02-21 17:47:46
我无法理解这个问题。你能否改变你的措辞? – Jivings 2012-02-21 17:47:53
让我试着重述一下我的问题:“是否有任何方法来限制Java中子类中的重载方法的范围?” – Pankesh 2012-02-21 17:52:09