java中方法重载指同一类中方法名相同、参数列表不同(个数、类型或顺序不同),编译期根据实参匹配,与返回值、修饰符、异常无关。

Java 中方法重载(Overload)是指在同一个类中定义多个同名方法,但它们的参数列表不同(参数个数、类型或顺序不同),从而让 JVM 在编译期根据实参自动选择调用哪个方法。
重载的关键条件:只看参数列表
判断是否构成重载,只关注方法名和参数列表(参数的类型、个数、顺序),与返回值类型、访问修饰符、异常声明无关。
- ✅ 允许:void print(int a) 和 String print(String s)
- ✅ 允许:void show(int a, String b) 和 void show(String b, int a)
- ❌ 不允许:int getValue() 和 String getValue() —— 参数列表完全相同,仅返回值不同,编译报错
- ❌ 不允许:private void log() 和 public void log() —— 仅修饰符不同,不构成重载
常见重载写法示例
以构造器或工具方法为例,体现实用性:
-
基础类型适配:
add(int a, int b)、add(double a, double b)、add(long a, long b) -
可变参数支持:
sum(int... nums)可与sum(int a, int b)共存,JVM 优先匹配更具体的固定参数版本 -
null 安全处理:
format(String s)和format(String s, String defaultValue)
注意几个易错点
- 自动类型提升可能引发意外匹配,比如调用
method(1)时,若存在method(int)和method(long),会优先选int版本;但若只有method(long),则会将1提升为long后调用 - 包装类和基本类型可能产生歧义,如同时定义
test(Integer i)和test(int i)是合法重载;但传入null时编译失败(无法确定调用哪个) - 泛型方法的类型擦除发生在运行期,但重载解析在编译期完成,所以
<t> void f(T t)</t>和<t> void f(List<t> list)</t></t>可以共存,因为擦除后参数类型不同(Object vs List)
重载与重写的区别一句话记住
重载是同一类中多态的静态体现,靠参数区分,编译期决定;重写是父子类间多态的动态体现,靠继承关系和方法签名一致,运行期由对象实际类型决定。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











