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 根据用于调用方法的对象调用相应的方法。
广告