C 基類 派生類 方法隱藏 方法重寫

2021-06-25 07:45:20 字數 1359 閱讀 8943

最近重新學習c#中基礎,找到了隱藏基類方法和重寫基類方法的一點區別,二者都是在派生類中定義了與基類中相同的方法,相同點派生類物件將執行各自的派生類中的方法,不同點,在向上轉型後,重寫基類方法的呼叫的是派生類的方法,而隱藏基類呼叫的是基類的方法,具體實驗**:

class program

//如果乙個方法被子類覆寫了 則子類和父類發生轉換時 自動呼叫已經被覆寫過的方法}

// 基類

class a2

public  void fun2()}

// 派生類

class b2 : a2

public  void fun2()}

執行結構:

向上轉型呼叫

b2--->fun1

a2--->fun2

基類a2呼叫

a2--->fun1

a2--->fun2

b2子類呼叫

b2--->fun1

b2--->fun2

請按任意鍵繼續. . .

過載、重寫和隱藏的定義:

過載:同乙個作用域內發生(比如乙個類裡面),定義一系列同名方法,但是方法的引數列表不同。這樣才能通過傳遞不同的引數來決定到底呼叫哪乙個。而返回值型別不同是不能構成過載的。

重寫:繼承時發生,在子類中重新定義父類中的方法,子類中的方法和父類的方法是一樣的 

例如:基類方法宣告為virtual(虛方法),派生類中使用override申明此方法的重寫.

隱藏:基類方法不做申明(預設為非虛方法),在派生類中使用new宣告此方法的隱藏。

過載時,根據引數選擇呼叫的方法;

重寫時,訪問父類子類皆呼叫子類的重寫方法;

隱藏時,訪問父類則呼叫父類的方法,子類子類的方法。

隱藏(new)示例:

using    system;  

class    a     

}  class    b:    a     

}  class    test     

}  輸出為  

b.f  

a.f  

重寫virtual(虛方法)示例  

using    system;  

class    a  

}  class    b:    a  

}  class    test  

}  輸出為  

b.f  

b.f補充:重寫override一般用於介面實現和繼承類的方法改寫,要注意

1、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全匹配,才能達到覆蓋的效果;

2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;

3、覆蓋的方法所丟擲的異常必須和被覆蓋方法的所丟擲的異常一致,或者是其子類;

C 隱藏基類方法和重寫

本質上來說,是隱藏子類中基類的方法,但在子類中仍然可以訪問該功能。示例如下 namespace 隱藏基類和重寫 public class duck animal class program 執行結果為 值得注意的是,若在子類duck中不使用new,可以正常執行,但會生成乙個警告如下,說明隱藏了乙個基...

基類與派生類的繼承是否必須重寫方法?

它預設也是抽象的方法,普通實現類必須重寫 變數都是靜態常量 由普通的類來實現介面,必須將介面所有抽象方法重寫 由抽象類來實現介面,則不要求重寫介面的方法。可以全部不重寫或只重寫一部分方法。普通類中不能有抽象方法。如果乙個普通類實現了乙個抽象介面或者抽象類,那麼意味著必須重寫抽象方法。並非一定要重寫父...

c 隱藏基類方法和重寫基類方法的區別

最近重新學習c 中基礎,找到了隱藏基類方法和重寫基類方法的一點區別,二者都是在派生類中定義了與基類中相同的方法,相同點派生類物件將執行各自的派生類中的方法,不同點,在向上轉型後,重寫基類方法的呼叫的是派生類的方法,而隱藏基類呼叫的是基類的方法,具體實驗 class program 如果乙個方法被子類...