virtual和abstract的區別和聯絡

2022-01-30 03:42:57 字數 950 閱讀 6638

壹. 相同

他們有些相似。有些場景用哪個都行!

1. 修飾父類、讓子類重寫

virtual和abstract都是用來修飾父類的,通過覆蓋父類的定義,讓子類重新定義。

2. 都用必須public

如果用來修飾方法,前面必須新增public,要不然就會出現編譯錯誤:虛擬方法或抽象方法是不能私有的。畢竟加上virtual或abstract  就是讓子類重新定義的,而private成員是不能被子類訪問的。

貳. 區別

但是它們的區別很大。(virtual是「虛擬的」,abstract是「抽象的")。

1. 必須實現、必須沒有實現

指父類中

virtual修飾的方法必須有實現(哪怕是僅僅新增一對大括號),而abstract修飾的方法一定不能實現。如對於virtual修飾的方法如果沒有實現則會報錯。

2.可以重寫、必須重寫

virtual可以被子類重寫,而abstract必須被子類重寫,

3.必須在抽象類

如果類成員被abstract修飾,則該類前必須新增abstract,因為只有抽象類才可以有抽象方法。

4.無法例項化

無法建立abstract類的例項,只能被繼承無法例項化,強行new出來 將出現編譯錯誤:抽象類或介面不能建立例項。

補充:

c#中如果要在子類中重寫方法,必須在父類方法前加virtual,在子類方法前新增override,這樣就避免了程式設計師在子類中不小心重寫了父類方法。

我也說說virtual 和非 virtual

virtual和非virtual關鍵是在執行時候,而不是在編譯時候.1.如果非virtual,編譯器就使用宣告的類對應的型別,也就是說,不是virtual的,在編譯時候,就定了,比如例子 執行結果 father,son,girl,都是執行的父類的方法 2,如果方法是virtual的,然後子類使用了o...

abstract和virtual方法實現多型的區別

多型就是不同物件對同乙個訊息的不同相應方式。舉例 cut 訊息 醫生收到cut訊息後,執行動手術 理髮師收到cut訊息後,執行減法 演員收到cut訊息後,停止演出。三個不同物件,對同乙個cut訊息的反應都不同,這就是多型。在c 中abstract和virtual方法都能實現多型。1.用abstrac...

abstract和virtual方法實現多型的區別

多型就是不同物件對同乙個訊息的不同相應方式。舉例 cut 訊息 醫生收到cut訊息後,執行動手術 理髮師收到cut訊息後,執行減法 演員收到cut訊息後,停止演出。三個不同物件,對同乙個cut訊息的反應都不同,這就是多型。在c 中abstract和virtual方法都能實現多型。1.用abstrac...