在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继承中限制重写方法的范围

限制为 “传感器驱动程序”只能生成“传感器测量”信息。 “传感器驱动程序”不允许使用“命令”信息。

+4

你不能。这会打破继承的概念。基类可以做的任何事情,你的子类需要尊重。 – 2012-02-21 17:47:46

+0

我无法理解这个问题。你能否改变你的措辞? – Jivings 2012-02-21 17:47:53

+0

让我试着重述一下我的问题:“是否有任何方法来限制Java中子类中的重载方法的范围?” – Pankesh 2012-02-21 17:52:09

你可以让你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> { 
} 
+0

感谢Ozan,您的解决方案在我的代码中完美工作。 – Pankesh 2012-02-21 23:23:54

+0

@PankeshPatel:不客气,如果你可以如此善良,并将我的回答标记为已接受? – Ozan 2012-02-22 15:33:08

+0

对不起ozan,我是新的在stackoverflow(仅2天)。我有3个声望。有了这些声誉,我不被允许标记。我真的很抱歉。 :) – Pankesh 2012-02-22 16:56:06

任何你看单继承的答案时,你可能会遇到的问题。我想你实际上想要使用多重继承(以接口的形式)。您应该考虑声明允许您执行某些操作的接口,或者实现某些将逻辑类“组合”在一起的接口的抽象类。

作为一般的经验法则,如果B是A,它将继承A的全部。但是如果B除了x,y和z之外是A,则可以抛出一个UnsupportedOperationException,在某些情况下可以接受,但你应该真的考虑重构你的层次结构,所以这一切更有意义。