重写(Overriding)和重载(Overloading)的区别是什么?

重写(Overriding)重载(Overloading) 是 Java 中两种常见的多态性实现方式,它们有不同的定义和用法。以下是它们的详细区别:

1. 重写(Overriding)

定义

  • 重写是子类对从父类继承的方法进行重新定义的过程。子类提供对父类方法的具体实现,来替代父类中已存在的方法实现。

特点

  • 方法签名:方法名、返回类型、参数列表都必须与父类中的方法完全相同。
  • 访问修饰符:子类中重写的方法的访问权限不能比父类方法的权限更严格。例如,如果父类方法是 public,则子类中的重写方法也必须是 public,不能是 protectedprivate
  • 异常处理:子类重写的方法可以抛出与父类方法相同或更少的异常类型,但不能抛出新的、更具体的异常。
  • 运行时多态:通过重写实现运行时的多态性,即通过父类引用调用子类重写的方法。

示例

class Parent {
    public void display() {
        System.out.println("Parent display");
    }
}

class Child extends Parent {
    @Override
    public void display() {
        System.out.println("Child display");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent obj = new Child();
        obj.display();  // 输出: Child display
    }
}

2. 重载(Overloading)

定义

  • 重载是在同一个类中定义多个方法,这些方法具有相同的名字但不同的参数列表(即参数的数量、类型或顺序不同)。

特点

  • 方法签名:方法名相同,但参数列表不同。返回类型可以相同也可以不同,但不能仅通过返回类型区分重载的方法。
  • 访问修饰符:重载方法的访问修饰符可以不同,且没有特定的限制。
  • 异常处理:重载方法可以抛出不同的异常类型,与其他方法没有特别的关系。
  • 编译时多态:通过重载实现编译时多态性,即编译器根据方法的参数列表来决定调用哪个方法。

示例

class Calculator {
    // 重载方法
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

public class Test {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        System.out.println(calc.add(2, 3));       // 输出: 5
        System.out.println(calc.add(2.5, 3.5));   // 输出: 6.0
        System.out.println(calc.add(1, 2, 3));    // 输出: 6
    }
}

总结

  • 重写(Overriding)

    • 子类重新定义父类的方法。
    • 方法签名必须完全相同。
    • 访问修饰符不能更严格。
    • 实现运行时多态性。
  • 重载(Overloading)

    • 同一类中定义多个方法,名字相同但参数列表不同。
    • 方法签名必须不同(参数列表)。
    • 访问修饰符可以不同。
    • 实现编译时多态性。

这两个概念虽然都与方法有关,但其实现方式和目的有所不同。重写用于改变继承的方法的行为,而重载用于在同一个类中提供多个具有相似功能的方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值