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

Method Overloading与Method Overriding均属动态多态吗?Java学习疑问

方法重载与多态类型的争议解析

主流技术结论

  • 方法重载(Overloading)属于静态(编译期)多态:编译阶段Java编译器就能根据调用时传入的参数数量、类型、顺序,精确匹配到对应的重载方法,无需等到运行期。
  • 方法重写(Overriding)属于动态(运行期)多态:运行时JVM会根据调用方法的对象的实际类型,决定执行父类还是子类的重写方法。

对书中观点的纠正

你参考的《Core Java An Integrated Approach》中认为重载属于动态多态的理由存在错误:

书中称“编译器在编译时无法确定用户实际调用的方法,必须等待Sample类的对象创建完成,因此JVM在运行时决定调用哪个方法”

这个逻辑不成立:方法重载的匹配只依赖调用时的参数信息,和对象是否创建无关。比如在代码中写new Sample().add(1,2),编译期就已经确定要调用两个参数的add方法,JVM运行时只是执行这个已确定的方法,不存在运行期选择的过程。

书中Note的合理性

书中提到的static、private、final方法的重载/重写属于静态多态是正确的:

  • static方法属于类,调用时直接绑定到类,编译期即可确定;
  • private方法无法被子类重写,子类的同名方法是独立的新方法,编译期绑定;
  • final方法禁止被重写,调用时也是编译期绑定。

内容的提问来源于stack exchange,提问作者Pratik Tushar Cholke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:35:24