重载(Overloading)与重写(Overriding)的区别总结
| 重载 | 重写 |
|---|---|
| 发生在同一类中 | 发生在父子类中 |
| 方法名必须相同 | 方法名和参数类型、个数、顺序必须相同 |
| 参数类型、个数、顺序至少有一个不同 | 函数体内容不同 |
| 返回类型和访问修饰符可以不同(无关,有坑【1】) | 里式替换原则 |
| 返回值不同,其他都相同不算重载(补坑【1】) | final、static、private方法不能重写 |
| 参数重载 | 外壳不变,核心重写 |
里式替换原则
重写有以下三个限制:
- 访问权限:子类方法 >= 父类方法
- 返回类型:子类方法 = 父类方法返回类型或为其子类
- 抛出的异常类型:子类方法 = 父类抛出异常类型或为其子类
拓展
函数的构成:
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}