假设Vehicle类包含名为CalculateMaxSpeed的虚方法.假设MotorVehicle和Automobile类都覆盖了这个方法.哪个类定义了执行后面代码中的第二个语句时调用的方法?
Vehicle
(grandparent ofAutomobile
) >MotorVehicle
(parent of
Auatomobile
) >Automobile
MotorVehicle car = new Automobile();
car.CalculateMaxSpeed();
在我的观点中,它应该是Automobile#CalculateMaxSpeed,但我担心它可能是MotorVehicle#CalculateMaxSpeed因为MotorVehicle包含了Automobile的实例.请有人详细说明.
最佳答案 你的理解是正确的.将调用Automobile#CalculateMaxSpeed.
这称为运行时多态性.
虽然汽车对象的类型是MotorVehicle,但在运行时,对象的内容将被识别为汽车类的类型.因此,该方法不是基于对象的类型而是基于对象的内容来调用的.
类型将由编译器使用,但调用方法的实际决定是在运行时根据对象的内容完成的.