补:Java中重写(Overriding)与重载(Overloading)的区别

Java中重写与重载的区别

    • 1. 重写(Overriding)
      • 概念
      • 规则
      • 目的
      • 示例
    • 2. 重载(Overloading)
      • 概念
      • 规则
      • 目的
      • 示例
    • 重要区别点(表格形式)

在Java编程中,重写和重载是两个基本概念,它们都是实现多态的方式,但它们的应用场景和规则有所不同。
补:Java中重写(Overriding)与重载(Overloading)的区别_第1张图片

1. 重写(Overriding)

概念

  • 当子类有一个与父类相同名称和参数的方法时,子类可以提供该方法的特定实现。这称为方法重写。

规则

  • 重写方法必须和被重写方法有相同的方法名称、返回类型和参数列表。
  • 重写方法不能拥有比被重写方法更严格的访问权限。
  • 重写方法可以抛出与被重写方法相同的异常或更具体的异常,不能抛出更广泛的异常。
  • 只有实例方法可以被重写,静态方法不能被重写。

目的

  • 改变或扩展父类中某个方法的行为。

示例

class Animal {
    void eat() {
        System.out.println("动物吃食物");
    }
}

class Dog extends Animal {
    @Override
    void eat() {
        System.out.println("狗吃肉");
    }
}

2. 重载(Overloading)

概念

  • 在同一个类中,可以存在多个名称相同但参数列表不同的方法。这就是方法重载。

规则

  • 重载的方法必须改变参数列表(参数的数量或类型)。
  • 重载的方法可以改变返回类型。
  • 重载的方法可以改变访问修饰符。
  • 方法的抛出异常可以不同。

目的

  • 增加方法的灵活性,允许使用相同的方法名进行不同类型的操作。

示例

class MathOperations {
    int sum(int a, int b) {
        return a + b;
    }

    double sum(double a, double b) {
        return a + b;
    }
}

重要区别点(表格形式)

当然可以,以下是Java中方法重载(Overloading)和重写(Overriding)的区别:

特征 方法重载 (Overloading) 方法重写 (Overriding)
基本概念 同一个类中定义了多个同名方法,但这些方法的参数列表不同。 子类中定义了与父类中同名的方法,并且参数列表也相同。
参数 参数类型、个数或顺序至少有一个不同。 参数类型、个数和顺序完全相同。
返回类型 可以不同,但不是区分重载的依据。 必须相同,或者是协变返回类型(子类覆盖父类方法时可以返回子类类型)。
访问修饰符 可以不同。 可以不同,但子类方法的访问级别不能低于父类方法。
抛出的异常 可以不同。 子类方法抛出的异常应该不大于父类方法抛出的异常范围。
继承 不涉及继承。 必须涉及一个继承体系中的两个类(父类和子类)。
调用时机 编译时决定使用哪个方法。 运行时根据对象的实际类型决定使用哪个方法。
用途 提高了方法的灵活性。 实现了运行时多态。
关键字 无特定关键字。 可以使用@Override注解来指明一个方法是重写的。

重载和重写是Java多态性的两种表现形式,它们都是实现代码复用和提高代码可维护性的重要手段。

  1. 应用上下文:重写发生在两个类(父子类)之间,而重载则发生在同一个类内。
  2. 参数列表:重写要求方法签名(名称+参数列表)必须相同,而重载则要求方法签名必须不同。
  3. 访问权限:重写方法的访问权限不能比被重写方法的访问权限更严格,而重载方法的访问权限可以不同。
  4. 返回类型:重写方法的返回类型必须和被重写方法的返回类型兼容,而重载方法的返回类型可以不同。

理解这两个概念并能够正确地在Java程序中使用它们,对于编写高效、可读性强的Java代码至关重要。

你可能感兴趣的:(java,开发语言)