引言

接口和抽象類是面向對象編程(OOP, Object Oriented programming)中兩個繞不開的概念,二者相似而又有所不同。接下來,我們來了解二者的概念并比較它們的異同。

什么是抽象類?

抽象類是一種特殊的類,該類不能被實例化。抽象類的存在就是為了被繼承,即抽象類可以被其它類繼承但不能被實例化。那么,我們?yōu)槭裁葱枰粋€無法被實例化的類呢?這樣做的優(yōu)點是,通過抽象類我們制定了一份強制所有子類必須遵守的合約,使所有子類有著一致的層次結構。抽象類提供了一種規(guī)范用于規(guī)定子類如何進行工作,子類可根據(jù)自身情況來重寫抽象類中的抽象成員(及其它可被重寫的成員)以滿足自身需求。

抽象類作為一個基類,可以包含已實現(xiàn)的成員,同時應至少包含一個抽象成員,否則就沒必要使用抽象類了。如果一個抽象類中僅僅包含抽象方法,那么這時抽象類就和接口很像了。

什么是接口?

接口中不能包含任何被實現(xiàn)的成員,即接口中只能包含成員的簽名。如,沒有方法體的方法、只包含訪問器關鍵字(set、get)的屬性等。和抽象類類似,接口也是一份合約。C#中,接口和抽象類的主要區(qū)別是,類可以實現(xiàn)多個接口,但只能繼承一個(抽象)類。

比較異同

<noscript id="tpz9b"></noscript>
特征接口抽象類
是否支持多繼承支持不支持
默認實現(xiàn)接口中不能包含任何已實現(xiàn)的成員

網(wǎng)友評論