我有一个抽象类的飞机,还有两个类的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{ ... }
}