重写

子类定义了一个与其父类中具有相同名称、参数列表和返回类型的方法,并且子类方法的实现覆盖了父类方法的实现。

外壳不变,核心重写

  • 参数列表必须相同
  • 返回类型可以不同,但必须是父类的派生类(子类)
  • 访问权限不能比父类低
  • 父类的成员方法只能被它的子类重写
  • 声明final的方法不能被重写
  • 声明为 static 的方法不能被重写,但是能够被再次声明。
  • 同包,可以重写除了privatefinal的所有方法。
  • 不同包,可以重写publicprotected的非final方法。
  • 构造方法不能被重写。
  • 继承必须。
  • 抛出的异常不能超过父类。

重载

  • 同一个类中。
  • 方法名字相同。
  • 参数不同。
  • 返回类型可以相同,可以不同。

被重载的方法

  • 必须改变参数列表(类型,数量)
  • 可以改变返回类型
  • 可以改变访问修饰符
  • 可以声明新的或更广的检查异常
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。
区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制)