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

2022-02-03 09:33:09 字數 874 閱讀 7999

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

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

//抽象方法

public abstract class animal

//虛方法

public class animal

public virtual void eat(){}

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

public class animal

編譯器會報錯:

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. 抽象方法必須在派生類中重寫,這一點跟介面類似,虛方法不必。如:

public abstract class animal

public class cat : animal

// we need implement animal.eat() here

}編譯器會報錯:main.cs(14): 'vstest.cat' does not implement inherited abstract member 'vstest.animal.eat()',因為我們沒有實現抽象類中所有抽象方法。

4.虛方法可以實現多型,而抽象方法不行。

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

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

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

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

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

抽象方法如下示 public abstract class people 宣告乙個抽象類 public class student people 繼承抽象類 public class program 總結 1 象方法只能宣告在抽象類中,使用關鍵字abstract 2 抽象類中的抽象方法必須被子類重寫...