| 区别 | 覆盖(override) | 重载(overload) |
|---|---|---|
| 实现上 | 子类对父类方法的重写 | 同一个类中建立多个同名方法 |
| 参数 | 与父类同名同参 | 与别的方法同名不同参 |
| 返回 | 子类与父类返回类型要一致 | 无此要求 |
| 权限 | 子类不能覆盖父类的private方法 | 无此要求 |
| 父类一个方法只能在子类覆盖一次 | 重载只要参数不同,可以多次 | |
| 覆盖是针对父类方法的重写 | 同类中的方法均可重载 | |
| 重写要求子类比父类抛出更少的异常 | 无此要求 |
一张图表明覆盖和重载的区别
覆盖 Override
- public class Main {
- public static void main(String[] args) {
- new Father().print();
- new Son().print();
- }
- }
-
- class Father{
- public void print(){
- System.out.println("father");
- }
- }
- class Son extends Father{
- @Override
- public void print() {
- System.out.println("SON");
- }
- }
输出结果:
father
SON
重载 Overload
- public class Main {
- public static void main(String[] args) {
- new Test().print();
- new Test().print(1);
- new Test().print(1,"重载");
- }
- }
-
- class Test{
- public void print(){
- System.out.println("无参数");
- }
- public void print(int i){
- System.out.println(i+" "+"个参数");
- }
- public void print(int i,String j){
- System.out.println(i+" "+j);
- }
- }
输出结果:
无参数
1个参数
1重载