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()的方法,签名相同。在主类中,我们为SuperClass创建了obj1,为SubClass创建了obj2。JVM会根据用于调用方法的对象来调用相应的方法。
输出
在执行时,它将产生以下输出 —
Method of the super class
Method of the sub class
重载和重写的区别
下表强调了方法重载和方法重写之间的主要区别 –
方法重载 | 方法重写 |
---|---|
方法重载被称为编译时多态性。 | 方法重写被称为运行时多态性。 |
为了使重载发挥作用,至少要有两个同名的方法。 | 为了使重写工作顺利进行,我们需要在父类和子类中至少有一个同名的方法。 |
这些方法必须有不同数量的参数。如果两个方法都有相同数量的参数,那么它们的类型必须是不同的。 | 两个方法都必须有相同数量和相同类型的参数。 |
结论
重载和重写是面向对象编程中的概念,用于提高程序的可读性和重用性。方法重载是静态多态性的一种类型。在方法重载中,我们可以定义多个具有相同名称但具有不同参数的方法。
方法重写是一种实现多态性的机制,即超类和子类有相同的方法,包括参数和签名。JVM会根据用于调用方法的对象来调用相应的方法。