Java方法重载指同一类中多个同名方法参数列表不同(类型、个数或顺序),编译器依实参静态匹配;返回类型、修饰符、异常、参数名不同均不构成重载。

Java 中方法重载(Overload)是指在同一个类中定义多个同名方法,但它们的参数列表(参数类型、个数或顺序)不同,编译器根据调用时传入的实际参数自动选择匹配的方法。返回类型和访问修饰符不影响重载判断。
参数类型不同是重载最常用的方式
只要参数类型不一致,即使参数个数相同,也能构成重载。编译器会优先匹配最精确的类型。
例如:
void print(int x) { System.out.println("int: " + x); }
void print(double x) { System.out.println("double: " + x); }
void print(String s) { System.out.println("String: " + s); }
调用 print(5) 会执行第一个方法;print(5.0) 调用第二个;print("hello") 调用第三个。
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
参数个数不同也构成重载
这是直观且安全的重载形式,无类型转换歧义。
- void log(String msg)
- void log(String msg, int level)
- void log(String msg, int level, Throwable t)
调用时传几个参数,就匹配对应版本。适合构建可选参数风格的 API。
参数顺序不同也能重载(需谨慎使用)
当参数类型互异且顺序调换后能形成新组合时,可以重载,但容易引发可读性与调用歧义问题。
void connect(String host, int port) { /* ... */ }
void connect(int port, String host) { /* ... */ } // 合法,但不推荐
建议避免仅靠顺序区分的重载,尤其当类型有隐式转换可能时(如 int 和 long),否则编译可能失败或行为难预料。
注意:这些情况不算重载
- 仅返回类型不同 → 编译错误(无法通过返回值区分调用)
- 仅访问修饰符不同(如 public / private)→ 不构成重载
- 仅异常声明不同 → 不影响重载判定
- 参数名称不同 → 完全无效,JVM 不识别参数名
重载发生在编译期,由编译器静态解析;而重写(Override)发生在运行期,依赖对象实际类型。

















