轉載於 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.接口對應是面向對象編程思想的重要原則:面向接口編程