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

Java父类do(double)与子类do(int):重写还是重载?调用疑问

问题解答
  • 子类的do(int in)方法属于重载,而非重写。Java中方法重写要求方法签名完全一致(方法名、参数类型、数量、顺序必须完全匹配),int和double是不同的参数类型,因此不满足重写的判定条件,子类和父类的两个do方法属于重载关系。

  • 关于代码Superclass subclass = new Subclass(); subclass.do(10);的执行逻辑:

    • 编译阶段:编译器依据**引用类型Superclass**来查找可用方法。Superclass中仅存在do(double)方法,传入的int类型参数可自动向上转型为double,因此编译器会在字节码中写入对Superclass.do(double)的方法调用指令。
    • 运行阶段:JVM会严格按照字节码中记录的方法签名进行实现绑定。由于子类并未重写do(double)方法,JVM最终会调用父类的do(double)实现;子类的do(int)方法签名与字节码中记录的不匹配,因此不会被执行。
  • 你之前预期调用子类do(int)的误区在于混淆了编译期和运行期的绑定逻辑:编译期已确定要调用的方法签名是do(double),运行期只会匹配该签名的方法实现,而非根据传入参数的原始类型去查找子类的其他重载方法。

内容的提问来源于stack exchange,提问作者abh77

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:22:36