Java中的"重写"(Override)和"重载"(Overload)是两个不同的概念,用于实现不同类型的方法多态性。
- 重写(Override):
- 重写是指在子类中重新定义(覆盖)父类中已经存在的方法,使得子类可以提供自己的实现。子类中的重写方法必须具有相同的方法名、参数列表和返回类型,以及更具体的访问权限(不能降低访问权限)。
- 重写关注于子类对父类方法的重新实现,使得在运行时调用方法时,根据对象的实际类型决定调用的是父类方法还是子类重写的方法。
- 重写方法可以实现多态性,即通过父类引用指向子类对象,并在运行时根据对象的实际类型调用相应的方法。
示例:
classAnimal { publicvoidmakeSound() { System.out.println("Animal makes a sound"); } } classCatextendsAnimal { publicvoidmakeSound() { System.out.println("Cat meows"); } }
- 重载(Overload):
- 重载是指在同一个类中可以定义多个具有相同名称但参数列表不同的方法。这些方法在名称相同的情况下,通过不同的参数个数、类型或顺序进行区分。
- 重载关注于同一个类中方法的多样性,允许在一个类中根据不同的需求提供多个方法,但方法名必须相同,方法的返回类型可以相同也可以不同。
- 重载不涉及继承关系,只是在同一个类中对方法的多态性支持。
示例:
classCalculator { publicintadd(inta, intb) { returna+b; } publicdoubleadd(doublea, doubleb) { returna+b; } }
总结:重写(Override)指子类重新定义父类中已有的方法,实现方法的多态性;重载(Overload)指在同一个类中定义多个方法,它们的方法名相同但参数列表不同,提供方法的多样性。重写涉及继承,而重载仅在同一个类中发生。