抽象類是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)接口可以支持回調,但是繼承不行。用於回調的接口只是提供指向方法的指針,而且是類型安全的指針方法。