如果一个类从它的父类继承了一个方法,如果这个方法没有被标记为 final ,就可以对这个方法进行重写。

重写的好处是:能够定义特定于子类类型的行为,这意味着子类能够基于要求来实现父类的方法。

在面向对象编程中, overriding 意味着去重写已经存在的方法。

方法重写规则

  • 重写方法的参数列表应该与原方法完全相同。
  • 返回值类型应该和原方法的返回值类型一样或者是它在父类定义时的子类型。
  • 重写函数访问级别限制不能比原函数高。举个例子:如果父类方法声明为公有的,那么子类中的重写方法不能是私有的或是保护的。
  • 只有被子类继承时,方法才能被重写。
  • 方法定义为 final,将导致不能被重写。
  • 一个方法被定义为 static,将使其不能被重写,但是可以重新声明。
  • 一个方法不能被继承,那么也不能被重写。
  • 和父类在一个包中的子类能够重写任何没有被声明为 private 和 final 的父类方法。
  • 和父类不在同一个包中的子类只能重写 non-final 方法或被声明为 public 或 protected 的方法。
  • 一个重写方法能够抛出任何运行时异常,不管被重写方法是否抛出异常。然而重写方法不应该抛出比被重写方法声明的更新更广泛的已检查异常。重写方法能够抛出比被重写方法更窄或更少的异常。
  • 构造函数不能重写。

使用 super 关键字

当调用父类的被重写的方法时,要用关键字 super。