重寫、過載和隱藏是經常在開發中用到的知識點,今天我們在這裡來講一下他們三個的區別。
零、重寫
所謂重寫,就是在繼承中,子類重新定義父類的方法,這裡需要注意的是:
必須在有繼承關係的類中重寫;
子類重寫的方法名和引數列表必須與父類的方法名和引數列表一致;
父類方法用virtual修飾;
子類方法用override修飾;
重寫一般用於介面實現和繼承類的方法改寫;
不管訪問父類還是子類的方法,都是呼叫的子類的方法。
我們通過**來看一下重寫:
建立父類cat
public
class
cat}
建立子類blackcatpublic
class
blackcat
:cat
}
呼叫
class
program
}
一、過載
所謂過載就是在同乙個作用域中,存在多個名稱相同但引數列表不同的方法,通過穿點不同的實參來決定具體呼叫哪個方法。這裡有一點需要注意:返回值不同不能稱為過載。同樣我們來通過**看一下過載:
定義三個名稱相同但引數不同的方法
public
class
person
public
void
info
(string ***)
public
void
info
(string name,
int age,
string ***)
}
呼叫
class
program
}
二、隱藏
隱藏就比較有意思了,隱藏又稱覆蓋,父類方法中不做聲明,子類方法中通過new關鍵字講方法隱藏,但是他不會改變父類方法,也就是說:訪問父類,呼叫父類方法,訪問子類,呼叫子類方法。這個跟重寫不同。我們在使用隱藏的時候需要注意以下幾點:
隱藏的方法的標誌必須要和被隱藏的方法的標誌完全匹配;
隱藏的方法的返回值必須和被隱藏的方法的返回一致;
隱藏的方法所丟擲的異常必須和被隱藏方法的所丟擲的異常一致,或者是其子類;
被隱藏的方法不能為private,否則在其子類中只是新定義了乙個方法,並沒有對其進行隱藏。
同樣我們通過**來看一下:
定義父類
public
class
cat}
定義子類
public
class
blackcat
:cat
}
呼叫
class
program
}
注意:隱藏主要用在無法改變父類方法的情況下三、總結
根據上述講解總結出如下區別:
過載是方法名相同,引數(個數/型別)不同;
重寫是重新定義父類的方法,需要用到virtual和override;
隱藏不改變父類的方法。
C 過載 隱藏和重寫
1.什麼是過載呢?過載 同乙個作用域,相同函式名,引數列表不同,與返回值是否相同沒有關係,過載又稱靜態多型 過載的作用 減輕程式設計師對函式名的記憶負擔,可讓所有功能相同的函式使用同乙個名字。引數列表不同可表現在 1 引數個數方面 例如 int add int i,int j int add int...
過載 重寫和隱藏
過載 a 相同的範圍 在同乙個類中 b 函式名字相同 c 引數不同 返回型別不足以區分過載函式 d virtual關鍵字可有可無 重寫 實際上就是虛函式動態繫結 a 不同的範圍,分別位於基類和派生類中 b 函式的名字相同 c 引數相同 e 一般情況下返回型別相同 除非返回型別分別為基類指標和派生類指...
過載 重寫 隱藏
共同點 函式名相同 定義 1 如果在類裡函式名相同但是形參不同,則為過載。形參不同包括形參的型別個數以及順序。2 類間。重寫和隱藏都發生在基類和派生類之間。重寫 覆蓋 發生在派生類和基類之間。必須滿足兩個條件 1 基類有virtual宣告 2 函式名和形參必須完全相同。隱藏 發生在派生類和基類之間,...