重寫 過載和隱藏

2021-09-24 22:10:36 字數 1761 閱讀 9785

重寫、過載和隱藏是經常在開發中用到的知識點,今天我們在這裡來講一下他們三個的區別。

零、重寫

所謂重寫,就是在繼承中,子類重新定義父類的方法,這裡需要注意的是:

必須在有繼承關係的類中重寫;

子類重寫的方法名和引數列表必須與父類的方法名和引數列表一致;

父類方法用virtual修飾;

子類方法用override修飾;

重寫一般用於介面實現和繼承類的方法改寫;

不管訪問父類還是子類的方法,都是呼叫的子類的方法。

我們通過**來看一下重寫:

建立父類cat

public

class

cat}

建立子類blackcat
public

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

}

注意:隱藏主要用在無法改變父類方法的情況下

三、總結

根據上述講解總結出如下區別:

過載是方法名相同,引數(個數/型別)不同;

重寫是重新定義父類的方法,需要用到virtualoverride;

隱藏不改變父類的方法。

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 函式名和形參必須完全相同。隱藏 發生在派生類和基類之間,...