在Java中,重写(Override)和重载(Overload)是两个重要的面向对象概念。它们在语法上有区别,在使用上需要注意一些细节。
重写(Override)
-
重写是子类对父类中的方法进行重新定义。
-
重写的方法必须与父类方法拥有相同的名称、参数列表和返回类型。
-
重写后子类对象调用此方法时,将执行子类中的方法体。
重载(Overload)
-
重载是在同一个类中,方法名称相同但参数列表不同的多个方法。
-
重载的方法名称必须相同,而参数列表和返回类型可以不同。
-
编译器根据参数类型来区分调用哪个重载方法。
区别和注意事项
-
重写强调子类对父类的扩展,重载强调一个类内的多种表现。
-
重写必须保持一致,重载可以参数或返回类型不同。
-
重写会覆盖父类方法,调用时动态绑定;重载在编译时静态绑定。
-
重写使用@Override注解可以检查是否重写正确。
-
重写返回类型不能比父类更宽泛,其他允许变化;重载完全自由设计。
重写的限制
- 返回类型不能比被重写方法更宽泛。
- 抛出的异常类型不能比被重写方法更通用。
- 访问权限不能比被重写方法更弱。
重载的限制
- 参数列表必须不同。
- 参数类型和顺序都要不同。
- 返回类型可以相同也可以不同。
注意事项
- 区分重写和重载的语法规则。
- 重写必须遵循“约定大于配置”原则。
- 重载使用时需注意参数类型和顺序的影响。
- 运用时机不同,重写实现继承关系,重载实现多态性。
总之,重写实现子类的特化,重载实现一个类的多种功能表现。两者在OOP中都很重要。