1. 程式人生 > >Java的方法過載和方法覆蓋的區別

Java的方法過載和方法覆蓋的區別

方法過載和方法覆蓋的區別:
方法過載:Overload
方法覆蓋:Override
兩者本身一點關係都沒有,僅僅只是因為名字很像。


方法過載:Overload
作用:
解決了同一個類中,相同的功能方法名不同的問題,既然是相同的功能,那麼方法的名字就應該相同
規則:(兩同一不同)

同類中,方法名相同,方法引數列表不同(引數型別、引數個數、引數順序)

下圖就是JDK自帶的工具類Arrays裡的方法過載:可以看出,方法名是相同的,只是引數不一樣





方法覆蓋:Override
作用:
解決子類繼承父類之後,可能父類的某一個方法不滿足子類的具體特徵,此時需要重新在子類中定義該方法,並重寫方法體。

方法覆蓋:當子類拓展了父類,可以獲得父類的部分方法和成員變數。可是當父類的某個方法不適合子類本身的特徵時,此時子類需要重新定義父類的方法,並重寫方法體,這就叫方法覆蓋(Override)。

規則:
一同兩小一大
一同:
1、例項方法簽名必須相同。(方法簽名=方法名+方法引數列表)
兩小:
1、子類方法的返回值型別是父類方法的返回值型別相同或者是其子類,子類可以返回一個更具體的類;
2、子類方法宣告丟擲的異常型別和父類方法宣告丟擲的異常型別相同或者是其子類。
一大:
1、子類方法的訪問許可權比父類方法的訪問許可權更大或相等。(private修飾的方法不能被子類所繼承,也就不存在覆寫的概念)。

鑑別是否是覆寫方法的必殺技:@Override標籤,若方法是覆寫方法,在方法上貼上該標籤,編譯通過;否則,編譯出錯。只有方法存在覆蓋的概念,欄位沒有覆蓋。

下圖是方法覆蓋的一個簡單的例子:參考一下