抽象類是abstract修飾符用于表示所修飾的類是不完整的,并且隻能用做基類。抽象類和非抽象類的不同點:
抽象類不能直接執行個體化。雖然一些變量和值編譯時類型可以是抽象的,但是這樣的變量和值必須為null,或者含有對非抽象類的執行個體的引用(此非是從抽象派生出的)。
當從抽象派生非的時候,這些非必須具體實作所繼承所有的抽象成員,進而重寫那些抽象成員。
abstract class A
{ publish abstract void F();}
abstract class B:A B為抽象類,所有他不用提供F的實作
{public void G();}
class C:B C繼承A B的所有抽象成員,并且提供一個具體實作
{
publish override void F()
{//actual implementation of F}
}
由于C中沒有抽象成員,是以可以,但不是必須将C聲明為非抽象類。
接口
接口可以擁有靜态成員、嵌套類型、抽象、虛拟成員、屬性和事件。實作接口的任何類都必須提供所聲明的抽象成員的定義。
他和抽象類的差別:
1) 接口不能有非抽象方法,但抽象類可以
2)一個類可以實作多個接口,但隻能有一個父類
3)接口不屬于繼承結構,他實際于繼承無關,是以無關的類也可以實作同一個接口
4)抽象類是一個不完整的類,需要進一步細化;而接口隻是個行為的規範
5)接口基本不具備任何基本特點,他隻是承諾了能調用的方法
6)接口可以支援回調,但是繼承不行。用于回調的接口隻是提供指向方法的指針,而且是類型安全的指針方法。