Java 面向对象核心入门(七):方法重载 Overload,同一个方法名能干不一样的活

「 Java 面向对象系列 07 」

📖 上篇回顾 :Java 面向对象核心入门(六):this 关键字完全解析-CSDN博客
前面学完构造方法、this关键字,本篇搞懂方法重载。 新手经常疑惑:为什么 Java 里好多方法名字一样,传的参数不一样,效果就不一样?这就是重载。

一、什么是方法重载

方法重载(Overload):同一个类中,方法名相同,参数列表不同,与返回值无关。

生活类比: 同一个行为叫"吃饭"

  • 吃饭():无参,吃普通米饭
  • 吃饭(一碗面):吃面
  • 吃饭(米饭,青菜):米饭配青菜

名字都叫吃饭,但是传入东西不一样,做的事情就不一样,这就是重载。

二、构成重载的3个必要条件(必须全部满足)

  1. 在同一个类里面
  2. 方法名字完全相同
  3. 参数列表不同:参数个数不同 / 参数类型不同 / 参数顺序不同

⚠️ 重点坑:和返回值类型没关系!只改返回值不算重载,直接编译报错。

✅合法重载示例

java 复制代码
public class Student {
    // 无参
    public void study(){
        System.out.println("学生在学习");
    }
    // 1个int参数
    public void study(int hour){
        System.out.println("学习"+hour+"小时");
    }
    // 参数类型不同
    public void study(String subject){
        System.out.println("学习科目:"+subject);
    }
}

调用演示:

java 复制代码
public class Test {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.study();            //自动匹配无参
        stu.study(3);           //匹配int参数
        stu.study("Java");      //匹配String参数
    }
}

JVM会根据你传入参数的个数、类型自动去匹配对应的方法,不用记一堆乱七八糟的方法名。

三、常见新手4大坑

坑1:只改返回值,不算重载

java 复制代码
//错误!仅返回值不同,编译报错
public void test(){}
public int test(){return 1;}

编译器分不清调用哪一个,返回值不作为重载判断依据。

坑2:参数名字不一样,不算重载

java 复制代码
// ❌ 错误写法:参数变量名不同但类型相同,不算重载,编译报错
public void add(int a) {}
public void add(int b) {}  // 报错:方法已定义

// ✅ 正确:参数类型不同才是重载
public void add(int a) {}
public void add(double b) {}

判断看参数类型列表,不看变量名。

坑3:构造方法也可以重载

构造方法同样遵守重载规则,这就是为什么我们可以同时有无参构造、有参构造。

java 复制代码
class Student{
    //无参构造
    public Student(){}
    //有参构造,重载
    public Student(String name){
        this.name = name;
    }
}

这也是开发中最常用的场景,一个类提供多种对象创建方式。

坑4:重载不是方法重写!别搞混

重载 Overload:同一个类,方法名相同参数不同。

重写 Override:子类继承父类之后才会出现,后续讲继承再说。

四、为什么要用重载?实际开发好处

  1. 方法名统一,记忆成本低,不用记一堆乱七八糟名字
  2. 同一个行为,支持多种传参方式,调用更灵活
  3. Java API大量使用重载:比如System.out.println()可以打印数字、字符串、对象,底层就是重载。

完整小案例:

java 复制代码
class Calc{
    //两个整数相加
    public int add(int a,int b){
        return a+b;
    }
    //三个整数相加,参数个数不同
    public int add(int a,int b,int c){
        return a+b+c;
    }
    //两个小数相加,参数类型不同
    public double add(double a,double b){
        return a+b;
    }
}

public class Demo{
    public static void main(String[] args) {
        Calc calc = new Calc();
        System.out.println(calc.add(1,2));
        System.out.println(calc.add(1,2,3));
        System.out.println(calc.add(1.5,2.5));
    }
}

运行结果:

复制代码
3
6
4.0

📝全文小结

  1. 重载:同类、同名、参数列表不同;返回值不参与判断。
  2. 参数不同:个数、类型、参数顺序不同。
  3. 构造方法支持重载,方便对象多种创建方式。
  4. 重载(Overload)发生在本类;重写(Override)发生在子父类,后续继承讲解。

下一篇预告:面向对象三大特性之 ------继承 extends

相关推荐
信誓旦旦的程序猿4 分钟前
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
小程序设计1 小时前
本科毕设避坑|大数据 / 单片机物联网 / 网络工程 / PLC / 机械设计选题与落地心得
java·hive·hadoop·单片机
卓怡学长1 小时前
w206基于SpringBoot的社区团购小程序设计与实现
java·spring boot·spring·intellij-idea
IT枫斗者枫哥6 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
代码方舟6 小时前
Java数据工程:利用天远全网运营商三要素优化线上实名认证合规体验
java·人工智能
BBmmo6 小时前
我的 Java 学习笔记 · 第 7 篇:泛型与通配符
java
独泪了无痕6 小时前
Hutool之RandomUtil:随机数生成的终极利器
java·后端
花开路口6 小时前
深入理解 Java/Kotlin 协变与逆变
java·kotlin
运行时异常6 小时前
【WMS 仓储系统集成 AI Agent 实战】第 7 讲:Vue3 前端工程化——Token 刷新锁、Markdown 渲染踩坑与权限体系
java
她的男孩6 小时前
开放接口限流从 20 改到 200 还是每分钟 20 次:拆完防重放+幂等+限流,我找到 5 个静默失效的坑
java·后端·架构