Java中的覆盖(Override)与重写(Overriding)

在Java编程语言中,覆盖(Override)和重写(Overriding)是面向对象编程中非常重要的概念,它们允许子类继承父类的行为,并在必要时提供自己的实现,以下是关于Java中覆盖和重写的详细介绍。
覆盖(Override)
定义
覆盖是指子类在继承父类时,用新的方法替换父类中的同名方法,这个新的方法必须与父类中的方法具有相同的签名(方法名、参数列表和返回类型)。
语法
public class SubClass extends SuperClass {
@Override
public ReturnType methodName(ParamType param1, ParamType param2) {
// 子类的方法实现
}
}
条件
- 方法必须具有相同的名称。
- 参数列表必须完全相同(包括参数类型和顺序)。
- 返回类型必须相同,或者子类方法的返回类型是父类方法返回类型的子类型。
- 子类方法不能有比父类方法更严格的访问权限。
重写(Overriding)
定义

重写是指在子类中提供与父类方法相同的行为,但可能使用了不同的实现方式,重写通常用于在子类中修改父类方法的行为,以适应特定的场景。
语法
与覆盖类似,重写方法也遵循相同的命名规则和参数列表要求。
public class SubClass extends SuperClass {
public ReturnType methodName(ParamType param1, ParamType param2) {
// 子类的方法实现
}
}
条件
- 方法必须具有相同的名称、参数列表和返回类型。
- 子类方法不能抛出比父类方法更多的异常。
- 子类方法不能访问比父类方法更严格的受保护成员。
如何打?
确定父类和子类
你需要有一个父类和一个子类,父类包含你想要覆盖或重写的方法。
覆盖或重写方法

在子类中,使用@Override注解声明你要覆盖或重写的方法,确保方法的签名与父类中的方法完全相同。
实现方法
在子类中实现方法,根据需要修改方法的行为。
测试
创建子类的实例,并调用方法以验证覆盖或重写是否成功。
public class Main {
public static void main(String[] args) {
SuperClass superClass = new SuperClass();
SubClass subClass = new SubClass();
superClass.methodName("arg1", "arg2");
subClass.methodName("arg1", "arg2");
}
}
注意事项
- 覆盖和重写方法必须具有相同的签名。
- 子类方法不能访问比父类方法更严格的受保护成员。
- 覆盖和重写方法可以抛出异常,但不能抛出比父类方法更多的异常。
- 使用
@Override注解可以提高代码的可读性和可维护性。
通过理解Java中的覆盖和重写,你可以更好地利用面向对象编程的特性,为你的项目编写出更加灵活和可扩展的代码。