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

Java多态重载方法调用时的参数匹配规则问题

Java重载方法匹配逻辑解答

核心规则前置

Java的**方法重载(Overload)**属于静态分派逻辑,要调用哪个签名的方法实现,在编译阶段就已经完全确定,匹配规则仅参考参数的静态声明类型,和运行时的实际对象类型无关。

代码执行流程逐段解析

  1. 第一步:main方法执行showText("def")
    仅有1个入参的showText只有method-1(形参类型为Object),String是Object的子类,匹配成功,进入method-1,输出1.....。
  2. 第二步:method-1内部执行showText(abc, "abc")
    这里的abc在method-1中的静态声明类型是Object,即使运行时实际传入的是String实例,编译阶段还是会按Object类型匹配重载方法。当前双参数的showText有两个候选:
    • method-2:首个形参类型为Object,第二个为String,完全匹配当前入参的静态类型
    • method-3:首个形参类型为String,不匹配abc的静态类型Object,被排除
      所以这里匹配method-2,进入后输出2.....。
  3. 第三步:method-2内部执行showText(text, item)
    这里的text在method-2中的静态声明类型是String,item的静态类型也是String,匹配时双参数候选:
    • method-2:首个形参Object,需要向上转型,匹配优先级低
    • method-3:首个形参String,第二个形参String,完全匹配
      所以这里匹配method-3,进入后输出3.....。

最终结论

实测输出1.....2.....3.....完全符合Java重载的静态分派规则,method-1内部调用双参数方法时匹配的是method-2,核心原因就是重载匹配仅看参数的静态声明类型,不看运行时实际类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:15:03