C 抽象方法與虛方法的區別例項

2021-05-23 10:49:22 字數 1097 閱讀 5973

虛方法和抽象方法都可以供派生類重寫,它們之間有什麼區別呢?

1. 虛方法必須有實現部分,並為派生類提供了覆蓋該方法的選項;抽象方法沒有提供實現部分,抽象方法是一種強制派生類覆蓋的方法,否則派生類將不能被例項化。如:



2. 抽象方法只能在抽象類中宣告, 抽象方法必須在派生類中重寫;虛方法不是 也不必要重寫。其實如果類包含抽象方法,那麼該類也是抽象的,也必須宣告為抽象的。如: 

編譯器會報錯:

main.cs(10): 'vstest.animal.sleep()' is abstract but it is contained in nonabstract class 'vstest.animal'

main.cs(11): 'vstest.animal.eat()' is abstract but it is contained in nonabstract class 'vstest.animal'

3. 抽象方法必須在派生類中重寫,這一點跟介面類似,虛方法不必。

抽象方法不能宣告方法實體 而虛方法可以 包含抽象方法的類不能例項化 ,而包含虛方法的類可以例項化

!如:

編譯器會報錯:

main.cs(14): 'vstest.cat' does not implement inherited abstract member 'vstest.animal.eat()'

因為我們沒有實現抽象類中所有抽象方法。

抽象方法只有宣告沒有實現,需要在子類中實現;虛擬方法有宣告和實現,並且可以在子類中覆蓋,也可以不覆蓋使用父類的預設實現。並且抽象類不能被例項化,只能例項化實現了全部抽象方法的派生類

抽象方法是虛擬方法的一種

抽象方法沒有實現,它的存在只是為派生類統一介面;派生類應該實現這個方法如果編寫乙個基類,它永遠不會被實現,那麼就應該將這個類中的乙個或多個方法定義為抽象方法。

只允許在抽象類中使用抽象方法宣告

虛方法與多型性關係密切,虛方法允許派生類完全或部分重寫該類的方法,需寫方法體。抽象類中可以包含抽象方法與一般的方法,抽象類不可以new,抽象方法只是乙個定義,沒有方法體,也就是沒有{},也不要在裡面寫內容。它們兩個相像的一點是都用override重寫。

C 中抽象方法與虛方法區別

什麼時候使用抽象方法 當兩個或多個類中有重複部分的時候,我們可以把重複的部分抽象出來作為乙個基類,如果希望這個基類不能被例項化,就可以把這個基類設計成抽象類。抽象方法特點 1 抽象方法沒有方法體 2 抽象方法用abstract修飾 3 抽象方法必須在抽象類中 4 抽象類無法例項化 5 父類是抽象類,...

虛方法與抽象方法的區別

隨著學習的深入了解的也是越來越多,之前學習vb的時候 可能級別太低,什麼虛方法,抽象方法根本就沒聽過。只知道有乙個 方法 那今天就讓我們說說虛方法,抽象方法的到底是何方神聖以及它們之間的區別。1 虛方法有自己的函式體,已經提供了函式實現,但是允許在子類中重寫或覆蓋。重寫的子類虛函式就是被覆蓋了。2 ...

C 中抽象方法與虛方法的區別

一 抽象方法 只在抽象類中定義,方法修飾符不能使用private,virtual,static.抽象方法如下示 public abstract class people 宣告乙個抽象類 public abstract void study 抽象方法只能定義在抽象類中。public class stu...