首页 > 知识问答 > 方法重载与方法重写的区别
方法重载与方法重写的区别
方法重载(Overloading)和方法重写(Overriding)是面向对象编程中两个重要的概念,它们都允许在子类中扩展父类的行为,但它们的实现方式和适用场景有所不同,本文将简要介绍方法重载和方法重写的区别。
1、定义:
方法重载:在同一个类中,允许存在一个以上同名的方法,只要它们的参数列表不同即可,这些方法可以有不同的返回值类型、访问修饰符以及抛出的异常,方法重载的主要目的是提高代码的可读性和易用性,让程序员可以根据不同的参数类型和个数来调用相应的方法。
方法重写:子类继承父类时,如果子类中有与父类同名且参数列表相同的方法,那么在子类中调用这个方法时,将执行子类中的实现,而不是父类中的实现,方法重写的主要目的是实现多态,让程序具有更好的扩展性和稳定性。
2、特点:
方法重载:
- 同一个类中的方法不能相互覆盖(override),即子类不能重新定义父类的方法。
- 方法重载的方法不能抛出比父类更宽泛的异常。
- 被重载的方法可以有默认方法(default method)。
方法重写:
- 子类可以覆盖父类的所有方法,包括私有方法和受保护方法。
- 方法重写要求子类方法的访问权限不能低于父类方法的访问权限。
- 方法重写要求子类方法抛出的异常不能比父类方法抛出的异常更宽泛。
- 被重写的方法不能使用final关键字修饰。
3、示例:
class Animal { void eat() { System.out.println("Animal is eating"); }}class Dog extends Animal { // 方法重载:在Dog类中定义一个与父类Animal中的eat()方法同名但参数列表不同的方法 void eat(String food) { System.out.println("Dog is eating " + food); } // 方法重写:在Dog类中定义一个与父类Animal中的eat()方法同名且参数列表相同的方法,并提供新的实现 @Override void eat() { super.eat(); // 调用父类的方法 System.out.println("Dog is eating bone"); // 在此处添加额外的操作 }}方法重载和方法重写都是实现代码复用和扩展的方法,但它们的实现方式和适用场景有所不同,方法重载关注的是在同一个类中如何根据不同的参数类型和个数来调用相应的方法;而方法重写关注的是如何在子类中扩展或修改父类的行为,以实现多态。