在面向對象的概念中,抽象類和接口都是一種特殊的類,它們具有一些共性,也有一些區別。
二者的相同點:
都屬於引用類型的數據,是一種特殊的類;
都不能實例化;
都可以包含未實現的方法聲明和屬性聲明;
兩者的派生類都必須實現它們的聲明,派生類實現抽象類的抽象屬性和抽象方法,而接口則要實現它的所有成員
二者的不同點:
抽象類是由相似對象抽象而成的類,而接口是一個行為的規定或規范;
一個類可以實現多個接口,但只能從一個基類(單繼承的情況下)中派生;
抽象類即包含了可變部分不可變部分,但是接口只定義了可變的部分;
總的來說,抽象類是對根源的抽象,接口是對動作的抽象;抽象類表示這個對象是什麼,接口表示這個對象能做什麼;當關注一個事物的本質時,如要創建組件的多個版本,用抽象類,當關注功能操作的時候,如創建的功能要在所有對象中使用,則可以用接口。
參考: 《C#可視化編程技術》