過載和重寫

2021-09-25 04:47:03 字數 1885 閱讀 5058

1重寫overriding是父類與子類之間多型性的一種表現,過載overloading是乙個類中多型性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (overriding)。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被「遮蔽」了。如果在乙個類中定義了多個同名的方法,它們或有不同的引數個數或有不同的引數型別,則稱為方法的過載(overloading)。

overloaded的方法是可以改變返回值的型別。

2方法重寫應遵循「三同一小一大」原則:

「三同」:即方法名相同,形參列表相同,返回值型別相同;

子類返回型別小於等於父類方法返回型別,

「一小」:子類方法宣告丟擲的異常比父類方法宣告丟擲的異常更小或者相等;

「一大」:子類方法的訪問修飾符應比父類方法更大或相等。

3多型:多型的機制:靠的是父類或者介面定義的引用變數可以指向子類或具體實現類的具體物件

4過載和重寫:方法的過載:

方法過載的定義:同乙個類或與他的派生類中,方法名相同,而引數列表不同的方法。其中引數列表不同指的是引數的型別,數量,型別的順序這三種至少有一種不同。

方法過載與下列無關:

與返回值型別無關;與訪問修飾符無關

構造方法也可以過載

方法的重寫:

方法的重寫的定義:在繼承關係的子類中,定義乙個與父類相同的方法

判斷是否重寫的方式:在方法之前加上@ overri de

方法重寫的特點:

在繼承關係的子類中重寫父類的方法

重寫的方法必須方法名相同,引數列表也相同

重寫的方法的返回值型別應該與父類中被重寫方法的返回值型別相同或是他的子類型別

重寫的方法的訪問許可權應該與父類中被重寫方法的訪問許可權相同或高於它的訪問許可權

重寫的方法不能丟擲比父類更加寬泛的異常

方法重寫的注意事項:

構造方法不能被重寫,不要問為什麼?因為構造方法名必須和類名相同

private修飾的成員方法不能被重寫

static修飾的方法不能被重寫

final修飾的方法不能被重寫

當子類重寫了父類中的方法後,子類物件呼叫該方法時呼叫的是子類重寫後的方法

5方法重寫的原則:

被重寫的方法不能為private,否則在其子類中只是新定義了乙個方法,並沒有對其進行重寫。

被重寫的方法不能為static。如果父類中的方法為靜態的,而子類中的方法不是靜態的,但是兩個方法除了這一點外其他都滿足重寫條件,那麼會發生編譯錯誤;反之亦然。即使父類和子類中的方法都是靜態的,並且滿足重寫條件,但是仍然不會發生重寫,因為靜態方法是在編譯的時候把靜態方法和類的引用型別進行匹配。

重寫是發生在執行時的,因為編譯期編譯器不知道並且沒辦法確定該去呼叫哪個方法,jvm會在**執行的時候作出決定。

方法過載的原則:

方法名稱必須相同。

引數列表必須不同(個數不同、或型別不同、引數型別排列順序不同等)。

方法的返回型別可以相同也可以不相同。

僅僅返回型別不同不足以成為方法的過載。

過載是發生在編譯時的,因為編譯器可以根據引數的型別來選擇使用哪個方法。

重寫和過載的不同:

方法重寫要求引數列表必須一致,而方法過載要求引數列表必須不一致。

方法重寫要求返回型別必須一致(或為其子型別),方法過載對此沒有要求。

方法重寫只能用於子類重寫父類的方法,方法過載用於同乙個類中的所有方法。

方法重寫對方法的訪問許可權和丟擲的異常有特殊的要求,而方法過載在這方面沒有任何限制。

父類的乙個方法只能被子類重寫一次,而乙個方法可以在所有的類中可以被過載多次。

過載是編譯時多型,重寫是執行時多型。

過載和重寫

物件導向的三大特性 繼承 封裝 多型。過載和重寫是多型的兩種表現形式。過載和重寫又有什麼區別呢?1 層次不同 重寫 發生在父類和子類之間。是子類重寫父類的方法,具有相同的方法名和方法引數。比如說,父子兩人都去吃飯 相同的方法 吃的是麵條 引數 父親飯量大,吃兩碗,兒子飯量小,就能吃一碗 實現了吃飯的...

過載和重寫

asp.net unity開發 net培訓 期待與您交流!過載 乙個類裡面有多個方法,方法名稱是相同的,返回值可以不同,引數列表的個數 型別 順序不同。區分過載方法可以通過引數列表的個數 型別 順序來決定呼叫哪個方法。過載可以子類過載父類的方法,並且可以靜態非靜態之間轉換。重寫 覆蓋 一般是指父類和...

重寫 和 過載

型構就是指方法的組成結構,具體包括方法的名稱和引數,涵蓋引數的數量 型別以及出現的順序,但是不包括方法的返回值型別,訪問許可權修飾符,以及abstract static final等修飾符。1.public void method int i,string s 4.5.public string m...