方法重载的核心是同一类中方法名相同但参数列表不同(类型、个数、顺序至少一不同),返回值、修饰符、异常不参与判断;仅返回值不同会导致编译错误。

方法重载的核心判断标准
重载(Overload)发生在同一个类中,多个方法名相同但参数列表不同(类型、个数、顺序至少一项不同)。返回值类型、访问修饰符、异常声明均不参与判断。面试常考陷阱:仅返回值不同不算重载,编译直接报错。
高质量重载设计的三个关键点
1. 语义一致,避免歧义
所有重载方法应完成同一逻辑目标,只是入口更友好。例如 formatDate(Date)、formatDate(String, String)、formatDate(long) 都是“格式化日期”,而不是混入“解析”或“校验”行为。
2. 参数优先选用不可变、明确类型的组合
- 避免同时存在 method(String) 和 method(Object) —— 字符串字面量会优先匹配前者,但 null 值调用时可能意外走入 Object 版本;
- 少用 method(int...) 和 method(int) 共存 —— 单个 int 调用会产生歧义,编译失败;
- 推荐用具体包装类(如 Integer)或自定义类型替代泛型 Object,提升可读性与类型安全。
3. 控制重载层数,善用委托
- 一般不超过 3~4 个重载版本;
- 最简版本(如只含必填参数)作为主实现,其余版本做参数预处理后统一委托给它,避免逻辑分散;
- 示例:save(User) 是核心,save(String name, int age) 封装成 User 后调用前者。
面试高频辨析点速记
× 错误认知:“private 方法不能重载” → 实际可以,重载与访问权限无关;
× 错误认知:“子类重写父类方法是重载” → 这是重写(Override),属于多态,和重载无关;
✓ 关键结论:重载是编译期行为,由编译器根据引用类型 + 实参确定调用哪个方法;重写是运行期行为,由实际对象类型决定。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
一个干净的重载示例
public class Calculator {
// 主实现:最明确的参数组合
public double add(double a, double b) {
return a + b;
}
<pre class="brush:php;toolbar:false;">// 重载1:支持整数,避免隐式转换干扰语义
public int add(int a, int b) {
return a + b;
}
// 重载2:支持多个数,用可变参数(注意不与双参 double 冲突)
public double add(double... numbers) {
return Arrays.stream(numbers).sum();
}
// 重载3:支持字符串数字(显式意图,不靠自动装箱)
public double add(String a, String b) {
return Double.parseDouble(a) + Double.parseDouble(b);
}
}

















