Java继承问题

Mis*_*isa 1 java inheritance abstract-class interface

我有一个抽象类Airplane,以及两个类PassengerAirplane和CargoAirplane,它们扩展了类Airplane.我还有一个可衡量的接口,以及实现它的两个类 - People和Containers.
因此,飞机可以自己做很多事情,并且有一种方法可以将可测量的东西添加到飞机上(称为addAMeasurableThing).PassengerAirplane/CargoAirplane和Airplane之间的唯一区别是addAMeasurableThing应该只接受People/Containers,而不是任何可衡量的东西.我该如何实现?

我试过:
飞机课:

public abstract Airplane addAMeasurableThing(Measurable m,int position);

PassengerAirplane类:

public Airplane addAMeasurableThing(Measurable m,int position){if(m instanceof People)...

CargoAirplane类:

public Airplane addAMeasurableThing(Measurable m,int position){if(m instanceof Containers)...

但是当我调试它时,我注意到CargoAirplane类中的addAMeasurableThing永远不会被调用,因为两种方法都具有相同的签名.那么如何调用相应的PassengerAirplane/CargoAirplane的addAMeasurableThing,具体取决于传递的可衡量事物的类型?

谢谢!

Mat*_*nry 6

使用泛型:

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{ ... }
}
Run Code Online (Sandbox Code Playgroud)