我有一个抽象类的飞机,还有两个类的PassengerAirplane和CargoAirplane,它们扩展了Airplane类。
我也有一个Measurable接口,以及两个实现它的类-People和Containers。
因此,飞机可以自己完成许多事情,并且有一种方法可以将可测量的事情添加到飞机上(称为addAMeasurableThing)。客运飞机/货运飞机与一架飞机之间的唯一区别是,addAMeasurableThing应该只接受人员/集装箱,而不接受任何可衡量的事物。我该如何实施?

我试着做:
飞机舱:


  公共抽象飞机
  addAMeasurableThing(可衡量的m,int
  位置);


客机等级:


  公共飞机配件
  (可测量的m,int位置){如果(m
  人物实例)...


货运飞机舱位:


  公共飞机配件
  (可测量的m,int位置){如果(m
  容器实例)...


但是,当我调试它时,我注意到CargoAirplane类中的addAMeasurableThing永远不会被调用,因为这两个方法具有相同的签名。那么如何根据传递的可测量事物的类型来调用适当的PassengerAirplane / CargoAirplane的addAMeasurableThing?

谢谢!

最佳答案

使用泛型:

abstract class Airplane<M extends Measurable>{
    public abstract Airplane addAMeasurableThing(M m, int position);
}

class PassengerAirplane extends Airplane<People>{
    @Override
    public Airplane addAMeasurableThing(People p, int position{ ... }
}

07-24 14:41