欢迎光临
我们一直在努力

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

「 Java 面向对象系列 07 」

📖 上篇回顾:Java 面向对象核心入门(六):this 关键字完全解析-CSDN博客

前面学完构造方法、this关键字,本篇搞懂方法重载。 新手经常疑惑:为什么 Java 里好多方法名字一样,传的参数不一样,效果就不一样?这就是重载。

一、什么是方法重载

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

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

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

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

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

  • 在同一个类里面
  • 方法名字完全相同
  • 参数列表不同:参数个数不同 / 参数类型不同 / 参数顺序不同
  • ⚠️ 重点坑:和返回值类型没关系!只改返回值不算重载,直接编译报错。

    ✅合法重载示例

    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);
    }
    }

    调用演示:

    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:只改返回值,不算重载

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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

    📝全文小结

  • 重载:同类、同名、参数列表不同;返回值不参与判断。
  • 参数不同:个数、类型、参数顺序不同。
  • 构造方法支持重载,方便对象多种创建方式。
  • 重载(Overload)发生在本类;重写(Override)发生在子父类,后续继承讲解。
  • 下一篇预告:面向对象三大特性之 ——继承 extends

    赞(0)
    未经允许不得转载:171主机测评 » Java 面向对象核心入门(七):方法重载 Overload,同一个方法名能干不一样的活
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址