1. 程式人生 > >JAVA中的基礎-----過載與重寫(覆蓋)的區別:overload與override

JAVA中的基礎-----過載與重寫(覆蓋)的區別:overload與override

JAVA中多型的實現機制主要通過overload和override實現。

1)方法的過載:簡言之,就是指同一個類有多個同名的方法,這些方法擁有不同的引數(同名不同參)。可以認為是類中方法的多型性,也稱為編譯時多型

2)方法的重寫(覆蓋):子類可覆蓋父類的方法,已達到“個性化“的目的。(同名同參同類型)使得JAVA可以在執行時動態繫結(將一個方法的呼叫與一個方法的主體連線在一起),也稱為執行時多型

兩者的區別:

過載(overload):是指在一個類中定義了多個同名不同參的方法。

1)過載是通過引數的不同來區別的,如引數個數、引數的型別、引數的順序不同。

2)過載不能通過方法的訪問許可權(public/protected/private)、返回值型別(String/void/int)和丟擲的異常來進行過載。

3)對繼承來說,如果基類方法的訪問許可權為private(私有的),那麼不能在派生類中對其過載(Ps:即不可以對private 修飾過的方法進行過載)。

      若派生類也定義了一個同名的函式,這只是新的方法,不會達到過載的效果。

重寫或覆蓋(Override):是指派生類覆蓋基類函式。

1)派生類中覆蓋的方法必須與基類中的方法同名同參。

2)派生類中覆蓋的方法的返回值必須與基類中的保持一致。

3)派生類中覆蓋的方法所丟擲的異常必須與基類保持一致。

4)不可以對基類中private修飾的方法進行覆蓋(即使寫了也是屬於新的子類方法)

5)不可以在派生類出現與基類同名同參不同返回型別的函式,如果有,編譯器錯誤(因為編譯器無法區分同名函式是屬於派生類還是基類的)。

兩者的主要區別:

1)覆蓋Override是父子類之間的關係(垂直關係),而過載Overload是自己的內部方法之間的關係(水平關係)。

2)覆蓋Override只能由一個方法或只能由一對方法產生關係,而過載Overload是多個方法之間的關係。

3)覆蓋Override呼叫方法體是根據物件的型別來決定,但是過載Overload是根據呼叫時的實參和形參表來選擇方法體的。