#中重寫(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...