c# – 多态和虚方法

假设Vehicle类包含名为CalculateMaxSpeed的虚方法.假设MotorVehicle和Automobile类都覆盖了这个方法.哪个类定义了执行后面代码中的第二个语句时调用的方法?

Vehicle (grandparent of Automobile) > MotorVehicle (parent of
Auatomobile) > Automobile

MotorVehicle car = new Automobile();
car.CalculateMaxSpeed();

在我的观点中,它应该是Automobile#CalculateMaxSpeed,但我担心它可能是MotorVehicle#CalculateMaxSpeed因为MotorVehicle包含了Automobile的实例.请有人详细说明.

最佳答案 你的理解是正确的.将调用Automobile#CalculateMaxSpeed.

这称为运行时多态性.

虽然汽车对象的类型是MotorVehicle,但在运行时,对象的内容将被识别为汽车类的类型.因此,该方法不是基于对象的类型而是基于对象的内容来调用的.

类型将由编译器使用,但调用方法的实际决定是在运行时根据对象的内容完成的.

点赞