限制Java继承中重写方法的范围

时间:2012-02-21 17:44:48

标签: java inheritance

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 {     }

上面提到的代码是我的程序结构。现在,情况是传感器驱动程序继承 它的所有父类方法。我想限制传感器驱动程序中重写方法的范围。

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

2 个答案:

答案 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,这在某些情况下是可以接受的,但是你应该考虑重新构建你的层次结构,这样才会更有意义。