接口與抽象類的區別:
接口支持多繼承;抽象類不能實現多繼承。
接口可以用於支持回調;抽象類不能實現回調,因為繼承不支持。
接口只包含方法、屬性、索引器、事件的簽名,但不能定義字段和包含實現的方法;抽象類可以定義字段、屬性、包含有實現的方法。
接口可以作用於值類型和引用類型;抽象類只能作用於引用類型。
什么情景下使用接口,什么情景下使用抽象類?
抽象類:
定義了一組接口,但又不想強迫每個實現類都必須實現所有的接口。可以用abstract class定義一組方法體,甚至可以是空方法體,然后由子類選擇自己所感興趣的方法來覆蓋。
某些場合下,只靠純粹的接口不能滿足類與類之間的協調,還必需類中表示狀態的變量來區別不同的關系。abstract的中介作用可以很好地滿足這一點。
規范了一組相互協調的方法,其中一些方法是共同的,與狀態無關的,可以共享的,無需子類分別實現;而另一些方法卻需要各個子類根據自己特定的狀態來實現特定的功能
接口:
類與類之前需要特定的接口進行協調,而不在乎其如何實現。
作為能夠實現特定功能的標識存在,也可以是什么接口方法都沒有的純粹標識。
需要將一組類視為單一的類,而調用者只通過接口來與這組類發生聯系。
需要實現特定的多項功能,而這些功能之間可能完全沒有任何聯系。