Java 方法的重载与重写的区别
Java中的方法重载
当一个类有两个或更多同名但参数不同的方法时,在调用时根据传递的参数调用相应的方法(或将相应的方法体与调用行动态绑定)。这个机制被称为方法重载。
方法重载的示例
如果你观察以下的示例,我们创建了一个名为 Sample 的类,这个类有两个同名并且返回类型相同的方法,唯一的区别是它们所接受的参数(一个方法接受两个整数变量,另一个方法接受三个整数变量)。
当你根据传递的参数调用 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()的方法,具有相同的签名。在主类中,我们创建了SuperClass的obj1和SubClass的obj2。JVM根据调用方法的对象调用相应的方法。
输出
执行时,将产生以下输出—
Method of the super class
Method of the sub class
方法重载和方法重写的区别
下表突出了方法重载和方法重写之间的主要区别:
方法重载 | 方法重写 |
---|---|
方法重载被称为编译时多态性。 | 方法重写被称为 运行时多态性 。 |
为了实现重载,至少需要两个同名方法。 | 为了实现重写,父类和子类必须至少有一个同名方法。 |
这些方法必须具有不同数量的参数。如果这两个方法有相同数量的参数,则它们的类型必须不同。 | 这两个方法必须具有相同数量、相同类型的参数。 |
结论
重载(Overloading)和覆盖(Overriding)是面向对象编程中用于提高程序可读性和可重用性的概念。方法重载是一种静态多态(polymorphism)的形式。在方法重载中,我们可以使用相同名称但具有不同参数的多个方法。
方法覆盖是一种实现多态的机制,其中超类和子类具有相同的方法,包括参数和签名。JVM根据调用方法的对象调用相应的方法。