虛方法和抽象方法同樣實現了多台機制
·抽象方法本身是一個隱含的虛方法 用法類似
抽象類只能是一個基類(父類)抽象類中的抽象方法只能聲明 實現必須在子類的重寫方法來實現----------不能被實例化,因此,正確定義其構造函數就非常重要。---------構造函數修飾符必須是protected或者private
抽象方法必須聲明在抽象類中
抽象方法不能為private 它是一個隱式的虛方法 沒有方法體
抽象類不能使用sealed
4.從抽象類中派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實現
abstruct class A
{
public abstruct void F();
}
class B:A
{
public overried void F(){}
}
虛方法:
一個類的成員被定義為virtual,就意味着它在告訴自己的子類:我准備了一筆遺產,你可以全盤接受,也可以完全拒絕或者修改我的遺囑。顯然,虛方法授予子類的權利甚至大於抽象方法。子類面對抽象方法只有重寫(override)的權利,而對於虛方法,它還可以選擇完全繼承-----虛方法破壞了對象的封裝性。
虛方法必須有實現部分,並為派生類提供了覆蓋該方法的選項
//抽象方法
public abstract class A
{
public abstract void a();
public abstract void b();
}
//虛方法
public class AA
{
public virtual void aa(){}
public virtual void bb(){}
}
區別:
抽象方法只能在抽象類中聲明,虛方法則不是
抽象方法必須在派生類中重寫,虛方法則不必
抽象方法不能聲明方法體,虛方法則可以
包含抽象方法的類不能被實例化,包含虛方法的類能夠被實例化