虛方法和抽象方法都可以供派生類重寫,它們之間有什麼區別呢?
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 抽象類中的抽象方法必須被子類重寫...