原文: https://javatutorial.net/method-overloading-vs-method-overriding-in-java

本文通过示例演示了 Java 中方法重载和方法覆盖之间的区别

方法重载方法覆盖都是在各种 Java 实现中高度使用的 OOP(面向对象编程)概念。 在本文中,我们已经写了关于 OOP 的 4 个主要概念的文章。 如果您不熟悉 OOP,请先查看此文章

方法重载与方法重载是一个常见的 Java 工作面试问题。 去面试,我们不能不知道有什么区别。

什么是方法重载?

如下面的示例所示,方法重载使我们能够使用相同名称,相同或不同返回类型的多个方法。 方法重载的重要之处在于,对于同一个返回类型,所有这些方法必须具有不同的参数。 通常的做法是保留参数最多的方法的实现,而其他方法(参数较少的)仅重定向到较多方法,为缺少的参数提供默认值,如下所示:

  1. public int calculate(int data[]) {
  2. return calculate("Default calculation", data, 0);
  3. }
  4. public int calculate(String name, int data[]) {
  5. return calculate(name, data, 0);
  6. }
  7. public int calculate(String name, int data[], int offset) {
  8. // do all the calculations here
  9. }

什么是方法覆盖?

方法覆盖是 Java 继承 OOP 原理的一部分。 方法覆盖的思想是在子类中更改给定方法的实现。 换句话说,您使用方法的相同签名(名称,返回类型,参数)“替代”了父类方法的实现,但是在覆盖方法内部实现了不同的功能。

Java 中的方法重载与方法覆盖 - 图1

Java 中的方法覆盖

Java 中的方法重载示例

下面的示例演示方法重载的用法。 我们有 4 个名称相同,参数和返回类型不同的方法

  1. package net.javatutorial;
  2. public class OverloadingExample {
  3. static int sumOf(int a, int b) {
  4. return a+b;
  5. }
  6. static int sumOf(int a, int b, int c) {
  7. return a+b+c;
  8. }
  9. static double sumOf(double a, double b) {
  10. return a+b;
  11. }
  12. static double sumOf(double a, double b, double c) {
  13. return a+b+c;
  14. }
  15. public static void main(String[] args) {
  16. System.out.println(sumOf(1,2));
  17. System.out.println(sumOf(10d,20d,30d));
  18. }
  19. }

该程序的输出为:

  1. 3
  2. 60.0

如您在上面的示例中看到的,基于我们使用的参数调用了另一种方法。 这是增加程序可读性的好方法。

Java 中的方法覆盖示例

动物超类

  1. package net.javatutorial;
  2. public class Animal {
  3. public void makeSound() {
  4. System.out.println("the animal makes sounds");
  5. }
  6. }

狗子类具有相同的方法,但行为不同

  1. package net.javatutorial;
  2. public class Dog extends Animal{
  3. @Override
  4. public void makeSound() {
  5. System.out.println("the dog barks");
  6. }
  7. }

请注意@Override注解的用法。 这不是强制性的,但是最好对被覆盖的方法进行注解,以提高代码的可读性。