1. 首先搞明白覆盖是什么?
· 举个栗子
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");
}
}
· 运行截图
该例中子类继承了父类,但重写了父类的方法,因此虽然是从父类中拿到的方法但重写之后与父类方法有了区别,因此称为覆盖(即子类方法覆盖了父类方法)
1. 重载是什么?
· 举个栗子
public class Main {
public static void main(String[] args) {
new Test().print();
new Test().print(3);
new Test().print(3,"双参");
}
}
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);
}
}
· 运行截图
该例子里写了多个print方法,但参数不同,因此可以运行,这也就是重载的含义,一个类中可以有多个同名不同参(参数列表不同)的方法。
从上述例子中可以看出覆盖和重载的一些区别,但还存在一些区别不再用代码验证了,具体如下
区别 |
覆盖 |
重载 |
实现上 |
子类对父类方法的重写 |
同一个类中建立多个同名方法 |
参数 |
与父类同名同参 |
与别的方法同名不同参 |
返回 |
子类与父类返回类型要一致 |
无此要求 |
权限 |
子类不能覆盖父类的private方法 | 无此要求 |
|
父类一个方法只能在子类覆盖一次 |
重载只要参数不同,可以多次 |
|
覆盖是针对父类方法的重写 |
同类中的方法均可重载 |
|
重写要求子类比父类抛出更少的异常 |
无此要求 |