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

相关推荐
吴声子夜歌2 小时前
Java扩展——OkHttp
java·开发语言·okhttp
卓怡学长2 小时前
w210基于springboot反诈平台设计与实现
java·spring boot·spring·intellij-idea
萧瑟余晖2 小时前
Java深入解析篇六十一之编译器API(javax.tools)详解
java·开发语言
码云数智-园园2 小时前
C++ STL 容器怎么选?vector、list、map、unordered_map 优缺点对比
java·开发语言
en.en..2 小时前
竖线 |:管道、按位或、掩码组合
java·开发语言
程序猿乐锅3 小时前
【计算机组成原理 | 第六章】中央处理器 CPU
java·开发语言
大模型丫丫3 小时前
如何提升单体 Spring Boot 应用的并发数?
java·spring boot·后端
Terra.K3 小时前
ThreadLocal解决一个线程里面跨层传递问题
java·开发语言·后端
泡海椒3 小时前
低代码规则开发:JQuick-Java声明式配置驱动开发落地教程
java·低代码·rxjava