淘先锋技术网

首页 1 2 3 4 5 6 7

Java中的方法复写(Override)和重载(Overload)都是实现多态性的方式,它们之间的区别如下:

方法复写:

子类继承了父类的方法,可以在子类中重新定义该方法,称为方法复写。
复写的方法必须与被复写的方法具有相同的名称、参数列表和返回值类型。
复写方法的访问修饰符不能更严格,可以更宽松。
方法的复写是发生在子类和父类之间的。

方法重载:

指在一个类中定义有多个名称相同但参数列表不同的方法,称为方法重载。
在方法重载中,参数个数、类型或顺序不同,但方法名称必须相同。
重载方法的访问修饰符必须相同。
相对于方法复写,方法重载是发生在同一个类中的。

在总结区别之前,先通过代码来看一下复写和重载的实现:

class Animal {
public void eat() {
System.out.println("Animal is eating");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("Dog is eating");
}
public void eat(String food) {
System.out.println("Dog is eating " + food);
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Animal();
a.eat(); // "Animal is eating"
Dog d = new Dog();
d.eat(); // "Dog is eating"
d.eat("bone"); // "Dog is eating bone"
}
}

从上面的代码可以看出,复写和重载的不同之处在于:

  • 复写是相同的方法在子类中重新定义,而重载是在同一个类中定义多个名称相同但参数列表不同的方法;
  • 复写方法的参数列表与被复写的方法必须相同,而重载方法的参数列表不同;
  • 复写方法的访问修饰符可以更宽松,而重载方法的访问修饰符必须相同;
  • 复写方法是发生在子类和父类之间的,而重载方法是发生在同一个类中的。

综上所述,复写和重载虽然实现多态性的方式不同,但都能有效地提高代码的灵活性和可复用性,在使用时还需根据实际需求选择合适的方法。