每日一知识点- Java 方法重载和方法重写

😀 准备好了吗?让我们一起步入这座Java神奇的城堡,揭开方法重载(Overloading)和方法重写(Overriding)的神秘面纱。

📝 每日一知识点

方法重载

方法重载指的是在同一个类中,可以定义多个方法名相同,但参数不同的方法。这些方法的返回类型可以相同也可以不同,但参数列表必须不同(参数个数不同或参数类型不同)。

特点:

  • 方法名相同。

  • 参数列表不同(参数个数或参数类型不同)。

  • 返回类型可以相同也可以不同。

    如果两个方法方法名相同,参数列表和类型也相同,返回类型不同,这同样会报错。(编译器并不知道该调用返回哪一个方法)

    在这里插入图片描述

方法的返回值只是作为方法运行后的一个状态,它是保持方法的调用者和被调用者进行通信的一个纽带,但并不能作为某个方法的‘标识’

  • 可以有不同的访问修饰符。
class MathOperations {
    // 加法方法,接收两个整数
    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 Main {
    public static void main(String[] args) {
        MathOperations math = new MathOperations();

        // 调用不同的重载方法
        System.out.println("两个整数相加: " + math.add(2, 3));        // 输出: 两个整数相加: 5
        System.out.println("三个整数相加: " + math.add(2, 3, 4));    // 输出: 三个整数相加: 9
        System.out.println("两个浮点数相加: " + math.add(2.5, 3.5)); // 输出: 两个浮点数相加: 6.0
    }
}

Main方法重载

main方法也可以重载。只不过,Java 虚拟机在运行的时候只会调用带有 String 数组的那个 main() 方法。

public class OverloadingMain {
    public static void main(String[] args) {
        System.out.println("String[] args");
    }

    public static void main(String args) {
        System.out.println("String args");
    }

    public static void main() {
        System.out.println("无参");
    }
}

参数类型转换

在方法重载中,参数类型转换是指Java会根据传入参数的类型自动选择最合适的方法。如果没有完全匹配的方法,Java编译器会尝试通过自动类型转换来匹配方法。例如,int可以自动转换为longfloat可以自动转换为double

在这里插入图片描述

public class OverloadingTypePromotion {
    void sum(int a, long b) {
        System.out.println(a + b);
    }

    void sum(int a, int b, int c) {
        System.out.println(a + b + c);
    }

    public static void main(String args[]) {
        OverloadingTypePromotion obj = new OverloadingTypePromotion();
        obj.sum(20, 20);
        obj.sum(20, 20, 20);
    }
}
//第二个 20 向上转型为 long

方法重写

方法重写指的是子类重新定义父类中已经定义的方法。重写的方法必须与被重写的方法具有相同的方法名、参数列表和返回类型。方法重写用于实现多态性(Polymorphism)。

特点:

  • 方法名相同。

  • 参数列表相同。

  • 返回类型相同。

  • 访问修饰符不能比父类方法的访问修饰符更严格。

    • 如果被重写的方法是 default,那么重写的方法可以是 default、protected 或者 public。

    • 如果被重写的方法是 protected,那么重写的方法只能是 protected 或者 public。

    • 如果被重写的方法是 public, 那么重写的方法就只能是 public。

  • 子类方法不能抛出比父类方法更多的异常。

注意点:

  • 方法重写只能重写从父类继承过来 public、protected 或者 default 修饰的方法。

  • final、static 的方法不能被重写。(静态方法可用于父类以及子类的所有实例。)

  • 构造方法不能被重写。

  • 如果一个类继承了抽象类,抽象类中的抽象方法必须在子类中被重写。

  • synchronized 、strictfp 关键字对重写规则没有任何影响。

class Animal {
    // 父类中的方法
    public void makeSound() {
        System.out.println("动物发出声音");
    }
}

class Dog extends Animal {
    // 重写父类的方法
    @Override
    public void makeSound() {
        System.out.println("狗叫: 汪汪");
    }
}

class Cat extends Animal {
    // 重写父类的方法
    @Override
    public void makeSound() {
        System.out.println("猫叫: 喵喵");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        // 调用重写的方法
        myDog.makeSound(); // 输出: 狗叫: 汪汪
        myCat.makeSound(); // 输出: 猫叫: 喵喵
    }
}

📎 参考文章

在这里插入图片描述

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天马行空的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值