Java 中方法重载和方法覆盖的区别


Java 中的方法重载

当一个类有两个或多个同名但参数不同的方法时,在调用时,根据传递的参数调用相应的方法(或相应的函数体将动态地绑定到调用行)。这种机制称为方法重载。

方法重载的示例

如果您观察下面的示例,我们在这里创建了一个名为 Sample 的类,该类有两个同名 (add) 且返回类型相同的方法,唯一的区别是它们接受的参数(一个方法接受两个整型变量,另一个接受三个整型变量)。

当您调用 add() 方法时,根据您传递的参数,相应的方法体将被执行。

public class Sample {
   public static void add(int a, int b) {
      System.out.println(a+b);
   }
   public static void add(int a, int b, int c) {
      System.out.println(a+b+c);
   }
   public static void main(String args[]) {
      Sample obj = new Sample();
      obj.add(20, 40);
      obj.add(40, 50, 60);
   }
}

输出

执行后,将产生以下输出:

60
150

Java 中的方法覆盖

在方法覆盖中,超类和子类具有相同名称(包括参数)的方法。JVM 根据用于调用方法的对象调用相应的方法。在覆盖中,返回类型也应该相同。

方法覆盖的示例

让我们举一个例子来理解 Java 中的方法覆盖是如何工作的:

class SuperClass {
    public static void sample() {
        System.out.println("Method of the super class");
    }
}
public class SubClass extends SuperClass {
    public static void sample() {
        System.out.println("Method of the sub class");
    }
    public static void main(String args[]) {
        SuperClass obj1 = new SubClass();
        SubClass obj2 = new SubClass();
        obj1.sample();
        obj2.sample();
    }
}

这里我们有一个超类和一个子类。这两个类都有一个名为 Sample() 的方法,其签名相同。在主类中,我们为超类创建了 obj1,为子类创建了 obj2。JVM 根据用于调用方法的对象调用相应的方法。

输出

执行后,将产生以下输出:

Method of the super class
Method of the sub class

重载和覆盖的区别

下表突出了方法重载和方法覆盖的主要区别:

方法重载

方法覆盖

方法重载被称为编译时多态。

方法覆盖被称为 运行时多态

为了使重载发挥作用,必须至少有两个同名的方法。

为了使覆盖工作,我们需要在父类和子类中至少有一个同名的方法。

这些方法必须具有不同的参数数量。如果两个方法的参数数量相同,则它们的类型必须不同。

这两个方法必须具有相同数量和类型的参数。

结论

重载和覆盖是 面向对象编程 中的概念,用于提高程序的可读性和可重用性。方法重载是一种静态 多态。在方法重载中,我们可以定义多个同名但参数不同的方法。

方法覆盖是一种实现多态的机制,其中超类和子类具有相同的方法,包括参数和签名。 JVM 根据用于调用方法的对象调用相应的方法。

更新于: 2023-09-13

34K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告