重寫和過載的區別

2021-10-20 01:34:13 字數 1049 閱讀 2235

1、概念:

​        過載:在乙個類中可以乙個以上的同名方法,只要他們的引數個數,或引數型別,或引數的順序不同即可

​        重寫:子類繼承父類以後,可以對從父類中繼承來的同名同引數方法,進行覆蓋操作

​   2、具體規則不同

​        過載:

1、必須有不同的引數列表

​            2、可以有不同的返回值型別,只要引數列表不同就可以了

​            3、可以有不同的訪問修飾符

4、可以丟擲不同的異常

重寫:1、子類重寫的方法名和形參列表與父類中被重寫的的方法名和形參列表相同

2、子類重寫的方法的許可權修飾符不小於父類被重寫方法的許可權修飾符(子類不能重寫父類中宣告為private許可權的方法)

3、子類重寫的方法的返回值型別不能大於父類被重寫的方法的返回值型別

3.1、父類被重寫的返回值型別是void,則子類重寫的方法的返回值型別只能是void

3.1、父類被重寫的返回值型別是a型別,則子類重寫的方法的返回值型別可以是a型別或者a類的子類

3.1、父類被重寫的返回值型別是基本資料型別,則子類重寫的方法的返回值型別也必須是相同的基本資料型別

4、子類重寫的方法丟擲的異常型別不大於父類被重寫的方法丟擲的異常型別    

注意:對於子類和父類中的同名同引數的方法

宣告為static的,不考慮重寫,因為static修飾的方法為靜態方法,是屬於類的, 不可以被重寫。

宣告為非static的,考慮重寫。

​    3、多型性:過載不具備多型性,重寫具備多型性

​        對於過載而言,在方法呼叫之前,編譯器就已經確定了所要呼叫的方法,這稱為「早繫結」或「靜態繫結」;

​        而對於多型,只等到方法呼叫的那一刻,解釋執行器才會確定所要呼叫的具體方法,這稱為「晚繫結」或「動態繫結」。 

引用bruce eckel的話:不要犯傻,只要它不是晚繫結,他就不是多型。

4、類的關係

重寫是子類和父類之間的關係,是垂直關係。

過載是同乙個類中的方法之間的關係,是水平關係。

過載和重寫區別

區別就是 過載 只在自己內部類 繼承的時候通過變換返回引數型別和引數個數來實現的 或者只在乙個類中的話,就是通過構造方法的引數不同來進行過載 左邊的是重寫,右邊的是過載 右邊子類的方法和父類的方法是完全兩個方法,因為引數變了 重寫 子類和父類之間 是子類實現父類同名方法,而且方法內部的引數型別要一模...

重寫和過載區別

當子類繼承父類的方法,這些方法不滿足自身需求時,子類可以重寫從父類繼承的方法。重寫的規則 修飾符 返回型別 方法名 引數 public void skill package jicheng public class dog extends anima package jicheng 子類 publi...

重寫和過載的區別

過載是指同乙個類中有若干個名稱相同但引數不同的方法。呼叫方法時,系統會根據實參情況,呼叫引數完全匹配的那個方法。重寫是指在繼承關係中,在派生類中重寫由基類繼承來的方法,這時基類和派生類中就有兩個同名的方法。系統根據物件的 實際型別呼叫相應版本的方法,當物件型別為基類時,系統呼叫基類中的方法。當物件型...