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