重载与重写的区别¶
一、重载(Overload)¶
同一个类里,方法名相同,参数不同:
- 编译期确定(静态分派)。
- 和返回值无关。
二、重写(Override)¶
子类重写父类方法:
- 运行期确定(动态分派)。
- 方法签名相同。
三、对比¶
| 重载 | 重写 | |
|---|---|---|
| 位置 | 同类 | 父子类 |
| 方法名 | 相同 | 相同 |
| 参数 | 不同 | 相同 |
| 返回值 | 无关 | 兼容(协变返回) |
| 异常 | 无关 | 不能更宽 |
| 访问权限 | 无关 | 不能更严 |
| 时机 | 编译期 | 运行期 |
四、@Override¶
标记重写,编译器检查签名是否正确。
五、特殊情况¶
- static 方法不能重写。
- private 方法不能重写。
- final 方法不能重写。
一句话
重载看参数,重写看子类。