C#—接口和抽象類的區別?


轉載於 https://www.cnblogs.com/jian1125/p/10530125.html

 

一、接口

接口是指對協定進行定義的引用類型,其他類型實現接口,以保證它們支持某些操作。接口指定必須由類提供的成員或實現它的其他接口。與類相似,接口可以包含方法、屬性、索引器和事件作為成員。

1、接口存在的意義是為了實現多態;


2、接口中只能包含方法(屬性、事件、索引);


3、接口的成員不能有任何實現;


4、接口不能被實例化;靜態類、抽象類也不可以被實例化


5、接口的成員不能有訪問修飾符(默認為public);


6、實現接口的子類必須將接口的所有成員函數實現;


7、子類實現接口的方法時,不需要任何關鍵字,直接實現即可。(抽象類、虛方法需要加override)

二、抽象類

抽象類,在面向對象過程中,所有的對象都是類描繪的,反過來,類里面的數據不足以把具體的對象描繪出來,這樣的類就是抽象類

1、抽象方法只能出現在抽象類中,但是抽象類中可以包含普通方法。

2、在父類中定義的抽象方法不能實現。

3、抽象類不能實例化(也就是不能new出來)。

4、抽象類與抽象方法需要添加abstract關鍵字。

5、子類實現父類的抽象方法時,需要添加override關鍵字。

6、如果抽象類的子類不是抽象類,那么子類中必須重寫父類抽象類的所有抽象方法。

 

三、抽象類和接口的區別

 

相同點

  1.不能實例化;

  2.包含未實現的方法聲明

  3.派生類必須實現未實現的方法,抽象類是抽象方法,接口則是所有成員(不僅是方法包括其他成員)

 

不同點

 

  1.接口可以多繼承,抽象類不能實現多繼承。

  2.接口只能定義抽象規則,抽象類既能定義抽象規則也能提供已實現的成員

  3.接口是一組行為規范,抽象類是一個不完全的類,着重於族的概念

  4.接口支持回調,抽象類不能實現回調,因為繼承不支持。

  5.接口只包含方法、屬性、索引器、事件的簽名,但不能定義字段和包含實現的方法,抽象類可以定義屬性、字段、包含有實現的方法

  6.接口可以作用於值類型和引用類型,抽象類只能作用於引用類型(例如:Struct只能繼承接口)

  7.抽象類應主要用於關系密切的對象,而接口則是適合為不相關的類提供通用功能

  8.接口着重於Can—Do關系類型,抽象類則偏重於IS—A式關系。

  9.接口多定義對象的行為,抽象類多定義對象的屬性。

  10.如果要設計小而簡練的功能塊,則使用接口,如果要設計大的功能單元,則使用抽象類

  11.接口對應是面向對象編程思想的重要原則:面向接口編程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM