Java重写与重载
重写
子类定义了一个与其父类中具有相同名称、参数列表和返回类型的方法,并且子类方法的实现覆盖了父类方法的实现。
外壳不变,核心重写
- 参数列表必须相同
- 返回类型可以不同,但必须是父类的派生类(子类)
- 访问权限不能比父类低
- 父类的成员方法只能被它的子类重写
- 声明final的方法不能被重写
- 声明为 static 的方法不能被重写,但是能够被再次声明。
- 同包,可以重写除了
private和final的所有方法。 - 不同包,可以重写
public和protected的非final方法。 - 构造方法不能被重写。
- 继承必须。
- 抛出的异常不能超过父类。
重载
- 同一个类中。
- 方法名字相同。
- 参数不同。
- 返回类型可以相同,可以不同。
被重载的方法
- 必须改变参数列表(类型,数量)
- 可以改变返回类型
- 可以改变访问修饰符
- 可以声明新的或更广的检查异常
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
| 区别点 | 重载方法 | 重写方法 |
|---|---|---|
| 参数列表 | 必须修改 | 一定不能修改 |
| 返回类型 | 可以修改 | 一定不能修改 |
| 异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
| 访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自有木兮丶