java方法重载要求同一类中同名方法的参数列表不同(数量、类型或顺序至少一项不同),返回类型等其他差异不构成重载;基本类型与包装类可重载但需注意装箱拆箱,varargs须置于最后且匹配优先级低于固定参数,重载基于引用类型静态绑定。

Java 中方法重载(Overloading)是指在同一个类中定义多个同名方法,但它们的参数列表必须不同——这是实现重载的唯一核心要求。返回类型、访问修饰符或异常声明的不同,**不能**构成重载。
参数列表不同是关键
重载只看参数的数量、类型和顺序,三者中至少有一项不同即可:
- 参数个数不同:如
print(String s)和print(String s, int n) - 参数类型不同:如
print(int x)和print(double x) - 参数顺序不同:如
process(String s, int n)和process(int n, String s)
注意:仅返回类型不同(如一个返回 int,另一个返回 String)不会被编译器认可为重载,会导致编译错误。
基本类型与包装类可共存,但需谨慎
例如:void method(int x) 和 void method(Integer x) 是合法重载,因为 int 和 Integer 是不同类型。但调用时可能发生自动装箱/拆箱,导致意外匹配。比如传入字面量 5,会优先匹配 int 版本;而传入 new Integer(5) 则匹配 Integer 版本。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
可变参数(varargs)要放在最后,且避免歧义
可变参数本质上是数组,因此 void test(String... args) 和 void test(String[] args) 不能共存(编译报错)。同时,如果已有 test(String s) 和 test(String... args),调用 test("a") 会优先匹配单参数版本,而不是可变参数版本——因为更精确的匹配优先级更高。
继承关系中的重载要注意静态绑定
重载是编译期决定的,依据的是**引用类型**而非实际对象类型。例如:
class A { void show(A a) { System.out.println("A"); } }
class B extends A { void show(B b) { System.out.println("B"); } }
A ref = new B();
ref.show(new B()); // 输出 "A",因为 ref 是 A 类型,只找 A 中的 show(A) 方法
若想按实际类型分发,应使用重写(Override)+ 动态绑定,而非重载。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










