Java面向对象——重写和重载

重写(Override)

  • 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写。
  • 父类的成员方法只能被它的子类重写。
  • 声明为 final 的方法不能被重写。
  • 声明为 static 的方法不能被重写,但是能够被再次声明。
  • 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
  • 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如:父类的一个方法申明了一个检查异常IOException,但是在重写这个方法的时候不能抛出Exception异常,因为Exception是IOException的父类,只能抛出IOException或者IOException的子类异常。
  • 父类型中的被重写函数体不为空:意味着对其大多数子类型来说,该方法可以被直接复用。
  • 对某些子类型来说,有特殊性,故重写父类型中的函数,实现自己的特殊要求。
  • 如果父类型中的某个函数实现体为空,意味着其所有子类型都需要这个功能,但各有差异,没有共性,在每个子类中均需要重写。
  • 重写的时候,不要改变原方法的本意。
  • 重写的时候子类只能与父类方法的访问范围相同或扩大,不能缩小,例如父类中的public方法在子类中重写时只能是public方法。

重载(Overload)

  • 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
  • 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
  • 被重载的方法必须改变参数列表(参数个数或类型不一样)。
  • 被重载的方法可以改变返回类型。
  • 被重载的方法可以改变访问修饰符。
  • 被重载的方法可以声明新的或更广的检查异常。
  • 方法能够在同一个类中或者在一个子类中被重载。

重写与重载的对比

Java面向对象——重写和重载