重载和重写的区别

在 Java 中,重载(Overloading)和重写(Overriding)是两种不同的概念,虽然它们有相似的名称,但它们有不同的作用和实现方式。以下是它们的主要区别:

1. 定义

  • 重载(Overloading):是指在同一个类中,方法名相同,但参数列表(参数的数量、类型或顺序)不同的情况。重载的方法可以有不同的返回类型,但返回类型不是区分重载方法的依据。

  • 重写(Overriding):是指子类重新定义继承自父类的方法,使得子类的方法可以替换掉父类的实现。重写的方法必须具有与父类方法相同的方法签名(方法名、参数列表)。

2. 方法签名

  • 重载:方法名相同,但参数列表必须不同。参数的数量、类型或顺序发生变化,才算是重载。

  • 重写:方法名、参数列表、返回类型必须与父类中被重写的方法完全相同。

3. 作用

  • 重载:增加了类中可用的不同版本的方法,使得一个方法可以根据不同的参数被调用。

  • 重写:允许子类提供对父类方法的特定实现,目的是为了改变或扩展父类的行为。

4. 返回类型

  • 重载:返回类型可以不同,但是返回类型不是区分重载的方法的标准。

  • 重写:返回类型必须与父类方法的返回类型相同,或者是父类返回类型的子类类型(协变返回类型)。

5. 发生时机

  • 重载:发生在编译时(静态绑定),Java 编译器根据方法调用时提供的参数类型和数量来决定调用哪个重载的方法。

  • 重写:发生在运行时(动态绑定),Java 虚拟机(JVM)根据对象的实际类型来决定调用哪个方法。

6. 示例

重载示例:
class Example {
    // 方法1:接受一个整数
    public void display(int a) {
        System.out.println("Integer: " + a);
    }

    // 方法2:接受一个字符串
    public void display(String a) {
        System.out.println("String: " + a);
    }

    // 方法3:接受一个整数和一个字符串
    public void display(int a, String b) {
        System.out.println("Integer: " + a + ", String: " + b);
    }
}
重写示例:
class Animal {
    // 父类方法
    public void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    // 子类重写父类方法
    @Override
    public void sound() {
        System.out.println("Dog barks");
    }
}

总结:

  • 重载是同一个类中,方法名相同但参数不同的方法,目的是提供多个版本的同一方法。
  • 重写是子类对父类方法的实现,目的是改变或扩展父类的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小子_你怕了

你的鼓励就是我最大的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值