方法重载的核心是同一方法名下通过参数类型、个数或顺序差异实现编译期绑定,不依赖返回值或修饰符;支持参数个数不同(如sum两/三/四参数)、类型不同(如print(int/double/String))、顺序不同(如process(int,String)与process(String,int)),构造方法同样适用。

方法重载(Overload)的核心是用同一个方法名,通过参数类型、个数或顺序的差异,让编译器自动选择最匹配的实现。它不靠返回值区分,也不依赖修饰符,只看“方法名 + 参数列表”是否唯一。
参数个数不同:最直观的重载方式
适合处理输入项数量灵活的场景,比如求和、拼接、初始化等。编译器根据你传了几个参数,直接定位到对应方法。
- 定义三个 sum 方法:两个 int、三个 int、四个 int
- 调用 sum(1, 2) → 走两个参数版本;sum(1, 2, 3) → 自动匹配三参数版本
- 注意:不能只靠个数“凑巧”区分——如果存在
sum(int)和sum(int, int),传一个参数时绝不会误调两个参数的版本
参数类型不同:适配多数据类型的统一接口
当同一逻辑要支持 int、double、String 等不同类型输入时,重载比写一堆不同名字的方法更干净。
- 例如打印方法:
print(int x)、print(double x)、print(String s) - 调用 print(42) 选 int 版;print("OK") 选 String 版
- 特别注意:
print(long x)和print(int x)是合法重载;但print(Object o)和print(String s)在传字符串时会优先选更具体的 String 版(涉及重载解析的“最具体匹配”规则)
参数顺序不同:应对混合类型组合
当方法需要接收多种类型但数量相同时,靠顺序也能区分,前提是类型本身不兼容(比如 int 和 String 无法自动转换)。
- 例如:
process(int age, String name)和process(String name, int age)可共存 - 调用 process(25, "张三") → 匹配第一个;process("李四", 30) → 匹配第二个
- 但
process(int a, double b)和process(double b, int a)同样有效,因为 int 与 double 类型不同且顺序可辨
构造方法也适用重载:对象创建更灵活
类的实例化过程同样受益于重载——不同参数组合对应不同初始化策略。
-
Book():无参,默认值 -
Book(String title):只设书名 -
Book(String title, String author, int pages):全字段赋值 - 用户写 new Book("Java入门") 或 new Book("算法导论", "Thomas", 800),编译器各找各的构造器,无需记忆多个构造类名

















