1. 程式人生 > >java中重寫與過載的區別:

java中重寫與過載的區別:

ava—重寫與過載的區別

這幾周開始看Java的知識,發現有一個有趣的現象就是,前兩天剛看過的知識點,過一天又忘掉了。而且很多東西堆在腦子裡像漿糊一樣。所以邊學習邊總結是很重要的,今天想寫一篇關於重寫和過載的部落格,為什麼?因為面試會問啊,這是基礎中比較重要的地方,但我百度了幾篇部落格之後發現寫的都差強人意,各有缺點,但是!!訪問量都特別高,所以我決定自己好好總結一篇自己的部落格,也算是給自己的學習之路做記錄。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

例如:

public class Father {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Son s = new Son();
        s.sayHello();
    }

    public void sayHello() {
        System.out.println("Hello");
    }
}

class Son extends Father{

    @Override
    public void sayHello() {
        // TODO Auto-generated method stub
        System.out.println("hello by ");
    }

}

重寫 總結: 
1.發生在父類與子類之間 
2.方法名,引數列表,返回型別(除過子類中方法的返回型別是父類中返回型別的子類)必須相同 
3.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private) 
4.重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常

2.過載(Overload)

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

。 
例如:

public class Father {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Father s = new Father();
        s.sayHello();
        s.sayHello("wintershii");

    }

    public void sayHello() {
        System.out.println("Hello");
    }

    public void sayHello(String name) {
        System.out.println("Hello" + " " + name);
    }
}

過載 總結: 
1.過載Overload是一個類中多型性的一種表現 
2.過載要求同名方法的引數列表不同(引數型別,引數個數甚至是引數順序) 
3.過載的時候,返回值型別可以相同也可以不相同。無法以返回型別作為過載函式的區分標準

面試時,問:過載(Overload)和重寫(Override)的區別?

答:方法的過載和重寫都是實現多型的方式,區別在於前者實現的是編譯時的多型性,而後者實現的是執行時的多型性。過載發生在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同或者二者都不同)則視為過載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的引數列表,有相容的返回型別,比父類被重寫方法更好訪問,不能比父類被重寫方法宣告更多的異常(里氏代換原則)。過載對返回型別沒有特殊的要求,不能根據返回型別進行區分。