C 中的重寫和覆蓋的區別

2022-07-19 06:06:15 字數 1260 閱讀 1817

#中重寫(override)和覆蓋(new)的區別

重寫用關鍵字 virtual 修飾的方法,叫虛方法。可以在子類中用override

宣告同名的方法,這叫「重寫」。相應的沒有用virtual修飾的方法,我們叫它實方法。

重寫會改變父類方法的功能。

看下面演示**:

#region

重寫public class c1

}public class c2 : c1

}c1 c1 = new c1();

console.writeline(c1.getname());//輸出「徐明祥」

c2 c2 = new

c2();

console.writeline(c2.getname());//輸出「xumingxiang」

//重點看這裡

c1 c3 = new c2();

console.writeline(c3.getname());//輸出「xumingxiang」

#endregion

覆蓋在子類中用 new 關鍵字修飾

定義的與父類中同名的方法,叫覆蓋。

覆蓋不會改變父類方法的功能。

看下面演示**:

#region 覆蓋

public class c1

}public class c2 : c1

}c1 c1 = new c1();

console.writeline(c1.getname());//輸出「徐明祥」

c2 c2 = new

c2();

console.writeline(c2.getname());//輸出「xumingxiang」

//重點看這裡,和上面的重寫作比較

c1 c3 = new c2();

console.writeline(c3.getname());//輸出「徐明祥」

#endregion

總結1:不管是重寫還是覆蓋都不會影響父類自身的功能(廢話,肯定的嘛,除非**被改)。

2:當用子類建立父類的時候,如

c1 c3 = new

c2(),重寫會改變父類的功能,即呼叫子類的功能;而覆蓋不會,仍然呼叫父類功能。

3:虛方法、實方法都可以被覆蓋(new),抽象方法,介面

不可以。

4:抽象方法,介面,標記為virtual的方法可以被重寫(override),實方法不可以。

5:重寫使用的頻率比較高,實現多型;覆蓋用的頻率比較低,用於對以前無法修改的類進行繼承的時候。

C 中過載 重寫(覆蓋)和隱藏的區別

基本概念 過載 是指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。示例 class a 隱藏 是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。示例 incl...

C 中過載 重寫(覆蓋)和隱藏的區別

基本概念 過載 是指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。示例 class a 隱藏 是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。示例 incl...

C 中過載 重寫(覆蓋)和隱藏的區別

基本概念 過載 是指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。示例 class a 隱藏 是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。示例 incl...