引言
接口和抽象類是面向?qū)ο缶幊蹋∣OP, Object Oriented programming)中兩個繞不開的概念,二者相似而又有所不同。接下來,我們來了解二者的概念并比較它們的異同。
什么是抽象類?
抽象類是一種特殊的類,該類不能被實例化。抽象類的存在就是為了被繼承,即抽象類可以被其它類繼承但不能被實例化。那么,我們?yōu)槭裁葱枰粋€無法被實例化的類呢?這樣做的優(yōu)點是,通過抽象類我們制定了一份強制所有子類必須遵守的合約,使所有子類有著一致的層次結(jié)構(gòu)。抽象類提供了一種規(guī)范用于規(guī)定子類如何進行工作,子類可根據(jù)自身情況來重寫抽象類中的抽象成員(及其它可被重寫的成員)以滿足自身需求。
抽象類作為一個基類,可以包含已實現(xiàn)的成員,同時應(yīng)至少包含一個抽象成員,否則就沒必要使用抽象類了。如果一個抽象類中僅僅包含抽象方法,那么這時抽象類就和接口很像了。
什么是接口?
接口中不能包含任何被實現(xiàn)的成員,即接口中只能包含成員的簽名。如,沒有方法體的方法、只包含訪問器關(guān)鍵字(set、get)的屬性等。和抽象類類似,接口也是一份合約。C#中,接口和抽象類的主要區(qū)別是,類可以實現(xiàn)多個接口,但只能繼承一個(抽象)類。
比較異同
特征 | 接口 | 抽象類 |
---|---|---|
是否支持多繼承 | 支持 | 不支持 |
默認實現(xiàn) | 接口中不能包含任何已實現(xiàn)的成員 |
網(wǎng)友評論 |