1. 程式人生 > 其它 >過載和重寫的區別

過載和重寫的區別

重寫(Override)從字面上看,重寫就是重新寫一遍的意思。其實就是在子類中把父類本身有的方法重新寫一遍。子類繼承了父類原有的方法,但有時子類並不想原封不動的繼承父類中的某個方法,所以在方法名、引數列表、返回型別(除過子類中方法的返回值是父類中方法返回值的子類時)都相同的情況下, 對方法體進行修改或重寫,這就是重寫。但要注意子類函式的訪問修飾許可權不能少於父類的。

public class Animal {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cat cat = new Cat();
        cat.sayHello();
    }
    public void sayHello() {
    	System.out.println("Hello");
    }
}
class Cat extends Animal{
    @Override
    public void sayHello() {
        // TODO Auto-generated method stub
        System.out.println("Hello,My name is cat ");
    }
}
Java

重寫總結:

1.發生在父類與子類之間

2.方法名、引數列表、返回型別(除過子類中方法的返回型別是父類中返回型別的子類)必須相同

3.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)

4.重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常

5.子類和父類在同一個包中,那麼子類可以重寫父類所有方法,除了宣告為private和final的方法。

6.構造方法不能被重寫

過載(Overload)在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同甚至是引數順序不同) 則視為過載。同時,過載對返回型別沒有要求,可以相同也可以不同,但不能通過返回型別是否相同來 判斷過載

public class Animal {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Animal animal = new Animal();
        animal.sayHello();
        animal.sayHello("cat");
    }
    public void sayHello() {
    	System.out.println("Hello");
    }
    public void sayHello(String name) {
    	System.out.println("Hello" + " " + name);
    }
}
Java

過載總結:

1.過載Overload是一個類中多型性的一種表現

2.過載要求同名方法的引數列表不同(引數型別,引數個數甚至是引數順序)

3.過載的時候,返回值型別可以相同也可以不相同。無法以返回型別作為過載函式的區分標準

我們通過表格來分析下過載和重寫的區別

過載(Overloading)重寫(Overriding)
類的數量 本類 父子類、介面與實現類
方法名稱 一致 一致
引數列表 必須修改 一定不能修改
返回型別 可以修改 一定不能修改
異常 可以修改 可以減少或刪除,但不能擴充套件