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

過載與重寫的區別

一、過載

如果同一個類中包含了兩個或兩個以上方法名相同、但有有不同的引數列表,則稱為方法的過載,也可稱該方法被過載了。

過載可以理解為一個類中的多型

說明:

1.引數列表不同包括:個數不同、順序不同、型別不同
2.僅僅引數變數名稱不同是不可以的。
3.跟成員方法一樣,構造方法也可以過載。
4.宣告為final的方法不能被過載。
5.宣告為static的方法不能被過載,但是能夠被在此宣告。


方法的過載的規則
1.方法名稱必須相同。
2.引數列表必須不同。
3.方法的返回型別可以相同也可以不相同。
4.僅僅返回型別不同不足以稱為方法的過載

二、重寫

1.方法的重寫: 子類出現了與父類相同方法名稱、引數列表和返回型別的方法,這個我們就稱作為方法的重寫。

2.方法重寫的前提: 必須要存在繼承的關係。

3.什麼是時候要使用方法的重寫:父類的功能無法滿足子類的需求時。

方法重寫要注意的事項

1.方法重寫時, 方法名與形參列表必須一致。 
2.方法重寫時,子類的許可權修飾符必須要大於或者等於父類的許可權修飾符。 
3.方法重寫時,子類的返回值型別必須要小於或者 等於父類的返回值型別。 
4.方法重寫時, 子類丟擲的異常型別要小於或者等於父類丟擲的異常型別。 Exception(最壞) 

當方法重寫時需要父類中原有的方法,可使用super關鍵字,該關鍵字引用當前類的父類。

三、過載與重寫的區別

       重寫(Overriding)和過載(Overloading)是Java多型性的不同表現

       一般重寫針對子類繼承父類,重寫父類的方法,通過動態繫結;而過載是同一方法名,引數列表不同,過載可以理解為一個類中的多型。

       在java中過載是由靜態型別確定的,在類載入時就可以取確定,屬於靜態分派;而重寫是由動態型別確定的,是在執行時確定的,屬於動態分派。動態分派是由虛方法實現的,虛方法表中存在著各個方法的實際入口地址,若父類中的某個子方法沒有被重寫,則父類與子類的方法表中的方法地址相同;若重寫了,則子方法表的地址指向重寫後的地址。

 

重寫與過載之間的區別

方法過載: 
1、同一個類中 
2、方法名相同,引數列表不同(引數順序、個數、型別) 
3、方法返回值、訪問修飾符任意 
4、與方法的引數名無關

方法重寫: 
1、有繼承關係的子類中 
2、方法名相同,引數列表相同(引數順序、個數、型別),方法返回值相同 
3、訪問修飾符,訪問範圍需要大於等於父類的訪問範圍 
4、與方法的引數名無關