You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java向上转型后方法调用疑问:为何执行子类moveForward?

Java多态与动态绑定问题解答

问题回顾

请考虑以下代码片段:

Vehicle aVehicle = new Auto();
aVehicle.moveForward(200);

若Auto类继承自Vehicle类,且两个类均实现了moveForward方法,以下哪个陈述正确?
A) 将执行Auto类的moveForward方法。
B) 将执行Vehicle类的moveForward方法。
C) 必须在代码中指定使用哪个类的moveForward方法。
D) 无法确定调用哪个类的方法。

用户困惑:第一行代码执行了向上转型,aVehicle难道不应被视为Vehicle对象吗?为什么答案是A?

核心解释

  • 这里的关键是Java的动态绑定机制:当用父类引用指向子类对象时,调用被重写的方法时,JVM会根据实际创建的对象类型(也就是new Auto()生成的Auto实例)来决定执行哪个方法,而非引用的声明类型。
  • 你提到的"aVehicle被视为Vehicle对象",指的是引用的编译时类型为Vehicle,但它指向的运行时对象类型是Auto。编译阶段仅会检查Vehicle类是否存在moveForward方法(保证语法合法),但运行阶段真正执行的是子类Auto中重写的方法版本。
  • 因此选项A正确,会执行Auto类的moveForward方法。

内容的提问来源于stack exchange,提问作者YI Chen Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:10:24