Java方法重载指同一类中多个同名方法参数列表(类型、个数或顺序)不同,编译器依实参静态选择匹配版本,返回值、访问修饰符、异常声明和参数名不影响重载判定。
Java中的方法重载,是指在同一个类中定义多个同名方法,但它们的参数列表(类型、个数或顺序)必须互不相同。编译器在调用时,会根据你传入的实际参数自动选择最匹配的那个版本——它不看返回值,也不管是public还是private,只认参数。
只有满足以下任意一项差异,才算有效重载:
print(String) 和 print(String, String)
process(int) 和 process(String)
handle(int, String) 和 handle(String, int)
以下内容完全不影响方法是否构成重载,编译器根本不拿它们做区分依据:
int,一个返回String),但参数完全一样 → 编译报错,不是重载public void show() 和 private void show() 参数相同时,不算重载throws IOException 不影响重载判定getAge(int year) 和 getAge(int birthYear) 是同一个方法,名字不同不算数重载不是炫技,而是让接口更自然、更贴近使用习惯:
StringUtils.isEmpty() 可重载支持 String、CharSequence、甚至 Object 类型参数add(int, int)、add(double, double)、add(long, long)
log(String)、log(String, Object...)、log(Level, String)
下面这个类展示了三种重载方式共存:
class Printer {
void print(String s) { System.out.println("字符串: " + s); }
void print(int i) { System.out.println("整数: " + i); }
void print(String s, int i) { System.out.println("混合: " + s + i); }
void print(int i, String s) { System.out.println("反序: " + i + s); }
}
// 调用示例:
Printer p = new Printer();
p.print("Hello"); // → 字符串: Hello
p.print(42); // → 整数: 42
p.print("Age: ", 25); // → 混合: Age: 25
p.print(100, "ms"); // → 反序: 100ms
重载发生在编译期,属于静态多态;它让代码更直观,也减
少了方法命名负担。只要参数列表能明确区分,就放心重载。