C 抽象類和介面的區別分析

2022-09-26 08:09:14 字數 1383 閱讀 1582

一、抽象類:

含有abstract修飾符的class即為抽象類,抽象類是特殊的類,只是不能被例項化,可以建立乙個變數,其型別是乙個抽象類,並讓它指向具體子類的乙個例項;除此以外,具有類的其他特性;重程式設計客棧要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能宣告於抽象類中,且不包含任何實現,派生類必須覆蓋它們。另外,抽象類可以派生自乙個抽象類,可以覆蓋基類的抽象方法也可以不覆蓋。

二、介面:

介面是引用型別的,類似於類,和抽象類的相似之處有三點:

1、不能例項化;

2、包含未實現的方法宣告程式設計客棧;

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

介面有如下特性:

介面除了可以包含方法之外,還可以包含屬性、索引器、事件,而且這些成員都被定義為公有的。除此之外,不能包含任何其他的成員,例如:常量、域、建構函式、析構函式、靜態成員。乙個類可以直接繼承多個介面,但只能直接繼承乙個類(包括抽象類)。 

兩者的語法區別:

1.抽象類可以有構造方法,介面中不能有構造方法。

2.抽象類中可以有普通成員變數,介面中沒有普通成員變數

3.抽象類中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。

4. 抽象類中的抽象方法的訪問型別可以是public,protected,但介面中的抽象方法只能是public型別的,並且預設即為public abstract型別。

5. 抽象類中可以程式設計客棧包含靜態方法,介面中不能包含靜態方法

6. 抽象類和介面中都可以包含靜態成員變數,抽象類中的靜態成員變數的訪問型別可以任意,但介面中定義的變數只能是public static final型別,並且預設即為public static final型別。

7. 乙個類可以實現多個介面,但只能繼承乙個抽象類。

8.介面可以用於支援**,而繼承並不具備這個特點.    9.抽象類實現的具體方法預設為虛的,但實現介面的類中的介面方法卻預設為非虛的,當然您也可以宣告為虛的. 

抽象類和介面的使用:

1.如果預計要建立元件的多個版本,則建立抽象類。抽象類提供簡單的方法來控制項版本。

2.如果建立的功能將在大範圍的全異物件間使用,則使用介面。如果要設計小而簡練的功能塊,則使用介面。

3.如果要設計大的功能單元,則使用抽象類.如果要在元件的所有實現間提供通用的已實現功能,則使用抽象類。

4.抽象類主要用於關係密切的物件;而介面適合為不相關的類提供通用功能。

5.好的介面定義應該是具有專一功能性的,而不是多功能的,否則造成介面汙染。如果乙個類只是實現了這個介面的中乙個功能,而不得不去實現介面中的其他方法,就叫介面汙染。

本文標題: c#抽象類和介面的區別分析

本文位址: /ruanjian/csharp/115149.html

C 抽象類和介面的區別

net提供了介面,這個不同於class或者struct的型別定義。介面有些情況,看似和抽象類一樣,因此有些人認為在.net可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣...

C 抽象類和介面的區別

純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中定義純虛函式的方法 virtual returntype function 0 帶有純虛函式的類稱為抽象類。抽象類是一種特殊的類,它是為了抽象和設計的目的而建立的,它處於繼承層次結構的較上層,抽象類是...

C 抽象類和介面的區別

一 抽象類 在類宣告中使用abstract修飾符的類稱為抽象類。含有乙個或乙個以上的抽象成員的類,必須定義為抽象類。當方法宣告包含abstract修飾符時,稱該方法為抽象方法,雖然抽象方法同時隱含為虛擬方法,但是它不能有virtual修飾符。宣告中包含abstract修飾的屬性稱為抽象屬性。抽象方法...