過載和重寫

2021-08-29 21:52:50 字數 1663 閱讀 2622

老話重提,又是過載和重寫的區別等的概念性問題,記錄下,以後萬一需要,直接檢視。 :p

[size=medium]過載(overload)[/size]

每個過載的方法(或者建構函式)都必須有乙個獨一無二的引數型別列表。

只能過載建構函式

[color=darkred]規則[/color]

[list]

[*]被過載的方法[color=red][u][b]必須[/b][/u][/color]改變引數列表;

[/list]

[list]

[*]被過載的方法[color=red]可以[/color]改變返回型別;

[/list]

[list]

[*]被過載的方法[color=red]可以[/color]改變訪問修飾符;

[/list]

[list]

[*]被過載的方法[color=red]可以[/color]宣告新的或更廣的檢查異常;

[/list]

[list]

[*]方法能夠在同乙個類中或者在乙個子類中被過載。

[/list]

[size=medium]重寫(override)[/size]

能夠在需要新的子類特有行為時重新在子類中定義方法。

[color=darkred]規則[/color]

[list]

[*]引數列表[u][b][color=red]必須完全[/color][/b][/u]與被重寫方法的相同;

[/list]

[list]

[*]返回型別[u][color=red][b]必須完全[/b][/color][/u]與被重寫方法的返回型別相同;

[/list]

[list]

[*]訪問級別的限制性[color=red][i][b]一定不能[/b][/i][/color]比被重寫方法的[color=red]強[/color];

[/list]

[list]

[*]訪問級別的限制性可以比被重寫方法的弱;

[/list]

[list]

[*]重寫方法[b]一定不能拋出新的檢查異常或比被重寫的方法宣告的檢查異常更廣泛[/b]的檢查異常

[/list]

[list]

[*]重寫的方法能夠丟擲更少或更有限的異常(也就是說,被重寫的方法宣告了異常,但重寫的方法可以什麼也不宣告)

[/list]

[list]

[*][b]不能重寫被標示為final的方法[/b];

[/list]

[list]

[*]如果不能繼承乙個方法,則不能重寫這個方法。

[/list]

區別:區別點 過載方法 重寫方法

引數列表 必須修改 一定不能修改

返回型別 可以修改 一定不能修改

異常 可以修改 可以減少或刪除,一定不能拋出新的或者更廣的異常

訪問 可以修改 一定不能做更養個的限制(可以降低限制)

呼叫過載方法:

引數型別決定選擇哪個過載版本(根據宣告的引數型別),這發生在編譯時。被呼叫的實際方法仍是發生在執行時期的虛擬方法呼叫。但是編譯器已經知道所呼叫的方法的簽名。因此,在執行時期,引數匹配已經明確,只是還不知道該方法所在的實際類。

重寫方法:

物件型別(即:堆上實際例項的型別決定呼叫選擇哪個方法,這發生在執行時期)

過載和重寫

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

過載和重寫

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

重寫 和 過載

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