c抽象類和介面的區別,抽象類和介面的區別是什麼?

2021-03-03 20:45:32 字數 5257 閱讀 1926

1樓:福喜

1抽象類

(1) 抽象方法只作宣告,而不包含實現,可以看成是沒有實現體的虛方法

(2) 抽象類不能被例項化

(3) 抽象類可以但不是必須有抽象屬性和抽象方法,但是一旦有了抽象方法,就一定要把這個類宣告為抽象類

(4) 具體派生類必須覆蓋基類的抽象方法

(5) 抽象派生類可以覆蓋基類的抽象方法,也可以不覆蓋。如果不覆蓋,則其具體派生類必須覆蓋它們。如:

using system;

public abstract class a //抽象類a

set }

public virtual int getnum() //抽象類包含虛方法

public void setnum(int n) // //抽象類包含普通方法

public abstract void e(); //類a中的抽象方法e

}public abstract class b : a //由於類b繼承了類a中的抽象方法e,所以類b也變成了抽象類

public class c : b }

public class test }

二、接 口

(1) 介面不能被例項化

(2) 介面只能包含方法宣告

(3) 介面的成員包括方法、屬性、索引器、事件

(4) 介面中不能包含常量、欄位(域)、建構函式、解構函式、靜態成員。如:

public delegate void eventhandler(object sender, event e);

public inte***ce itest

void test();

event eventhandler event;

int this[int index] }

(5) 介面中的所有成員預設為public,因此介面中不能有private修飾符

(6) 派生類必須實現介面的所有成員

(7) 一個類可以直接實現多個介面,介面之間用逗號隔開

(8) 一個介面可以有多個父介面,實現該介面的類必須實現所有父介面中的所有成員

三、抽象類和介面

相同點:

(1) 都可以被繼承

(2) 都不能被例項化

(3) 都可以包含方法宣告

(4) 派生類必須實現未實現的方法

區 別:

(1) 抽象基類可以定義欄位、屬性、方法實現。介面只能定義屬性、索引器、事件、和方法宣告,不能包含欄位。

(2) 抽象類是一個不完整的類,需要進一步細化,而介面是一個行為規範。微軟的自定義介面總是後帶able欄位,證明其是表述一類「我能做。。。」

(3) 介面可以被多重實現,抽象類只能被單一繼承

(4) 抽象類更多的是定義在一系列緊密相關的類間,而介面大多數是關係疏鬆但都實現某一功能的類中

(5) 抽象類是從一系列相關物件中抽象出來的概念, 因此反映的是事物的內部共性;介面是為了滿足外部呼叫而定義的一個功能約定, 因此反映的是事物的外部特性

(6) 介面基本上不具備繼承的任何具體特點,它僅僅承諾了能夠呼叫的方法

(7) 介面可以用於支援**,而繼承並不具備這個特點

(8) 抽象類實現的具體方法預設為虛的,但實現介面的類中的介面方法卻預設為非虛的,當然您也可以宣告為虛的

(9) 如果抽象類實現介面,則可以把介面中方法對映到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現介面中方法

抽象類和介面的區別是什麼?

2樓:仁昌居士

抽象類和介面的區別為:表示內容不同、性質不同、成員變數不同。

一、表示內容不同

1、抽象類:抽象類表示該類中可能已經有一些方法的具體定義。

2、介面:介面就僅僅只能定義各個方法的介面(方法名,引數列表,返回型別),並不關心具體細節。

二、性質不同

1、抽象類:抽象類是物件的抽象。

2、介面:介面是一種行為規範。

三、成員變數不同

1、抽象類:抽象類中的成員變數可以被不同的修飾符來修飾。

2、介面:介面中的成員變數預設的都是靜態常量(static final)。

3樓:tc男

1.抽象類是單一繼承,介面是多重實現【子類只能有一個父類,而子類可以實現多個介面,繼承

抽象類表示「從屬」,實現介面表示「組合」關係】

--2.介面中全是抽象方法,抽象類中可以有抽象方法,也可有方法體的方法

--3.介面中無構造方法,不可繼承,可實現;抽象類可有構造方法,不可被例項化

--4.抽象類的抽象方法不能使用private,final,static,方法不能用private,final修飾

介面的屬性預設是用public,static,final修飾,介面中方法是預設用public,

abstract修飾

4樓:天堂向右

前段時間我面試的時候總結的筆記:

抽象類:

1) 抽象方法,只有行為的概念,沒有具體的行為實現。

使用:abstract 關鍵字修飾,並且沒有方法體。

2) 包含抽象方法的類,就一定是抽象類。

使用: abstract 關鍵字修飾,包含抽象方法。

3) 抽象類不能直接建立例項。可以定義引用變數。

4) 抽象類只能被繼承,一個具體類繼承一個抽象類,必須實現所有抽象方法。

5) 抽象方法和抽象類非常適合作為系統的分析和設計的工具。

介面:1 介面:全部的方法都是抽象方法,全部的屬性都是常量。

介面用來表示純抽象概念,沒有任何具體的方法和屬性。

2 不能例項化,可以定義變數。

3 介面變數可以引用具體實現類的例項。

4 介面只能被實現(繼承),一個具體類實現介面,必須使用全部的抽象方法。

5 介面之間可以繼承。

6 一個具體類可以實現多個介面,實現多繼承現象,表示:

7 介面中的屬性,預設是常量 public static final8 接中的方法一定是:public abstract9 實現一個介面,使用關鍵字implements, 實現實際上是一種繼承關係。介面和實現類是父子型別的關係

5樓:靠名真tm難起

抽象類是用來捕捉子類的通用特性的 。它不能被例項化,只能被用作子類的超類。抽象類是被用來建立繼承層級裡子類的模板。

介面是抽象方法的集合。如果一個類實現了某個介面,那麼它就繼承了這個介面的抽象方法。這就像契約模式,如果實現了這個介面,那麼就必須確保使用這些方法。

介面只是一種形式,介面自身不能做任何事情。

6樓:13婕綸

1 .介面只能包含抽象方法,抽象類可以包含普通方法。

2. 介面只能定義靜態常量屬性,抽象類既可以定義普通屬性,也可以定義靜態常量屬性。

3 .介面不包含構造方法,抽象類裡可以包含構造方法。

4.抽象類不能被例項化,但不代表它不可以有建構函式,抽象類可以有建構函式,備繼承類擴充

5.介面是核心,其定義了要做的事情,包含了許多的方法,但沒有定義這些方法應該如何做。

6. 如果許多類實現了某個介面,那麼每個都要用**實現那些方法

7.如果某一些類的實現有共通之處,則可以抽象出來一個抽象類,讓抽象類實現介面的公用的**,而那些個性化的方法則由各個子類去實現。

所以,抽象類是為了簡化介面的實現,他不僅提供了公共方法的實現,讓你可以快速開發,又允許你的類完全可以自己實現所有的方法,不會出現緊耦合的問題。

7樓:內蒙it優就業

1、抽象類和介面都不能直接例項化,如果要例項化,抽象類變數必須指向實現所有抽象方法的子類物件,介面變數必須指向實現所有介面方法的類物件。

2、抽象類要被子類繼承,介面要被類實現。

3、介面只能做方法申明,抽象類中可以做方法申明,也可以做方法實現

4、介面裡定義的變數只能是公共的靜態的常量,抽象類中的變數是普通變數。

5、抽象類裡的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那麼該子類只能是抽象類。同樣,一個實現介面的時候,如不能全部實現介面方法,那麼該類也只能為抽象類。

6、抽象方法只能申明,不能實現,介面是設計的結果 ,抽象類是重構的結果

7、抽象類裡可以沒有抽象方法

8、如果一個類裡有抽象方法,那麼這個類只能是抽象類

9、抽象方法要被實現,所以不能是靜態的,也不能是私有的。

10、介面可繼承介面,並可多繼承介面,但類只能單根繼承。

8樓:小童鞋_成

您好,提問者:

1、抽象類:

如果這個類裡面的方法有一個是抽象的,那麼這個類必須是抽象的。

抽象類中的方法,子類必須實現。

抽象類中可以有變數,可以有方法體的方法。

2、介面:

介面中方法都預設是public 的,不能有方法體。

介面中的變數都常量,都是public static final 的,必須先賦值。

如果一個類實現了此介面,必須覆蓋介面中的所有抽象方法。

9樓:吃飽飽心情好好

1、抽象類裡面可以有非抽象方法

但介面裡只能有抽象方法

宣告方法的存在而不去實現它的類被叫做抽像類(abstract class),它用於要建立一個體現某些基本行為的類,併為該類宣告方法,但不能在該類中實現該類的情況。不能建立abstract 類的例項。然而可以建立一個變數,其型別是一個抽像類,並讓它指向具體子類的一個例項。

不能有抽像建構函式或抽像靜態方法。abstract 類的子類為它們父類中的所有抽像方法提供實現,否則它們也是抽像類為。取而代之,在子類中實現該方法。

知道其行為的其它類可以在類中實現這些方法。

2、介面(inte***ce)是抽像類的變體。在介面中,所有方法都是抽像的。多繼承性可通過實現這樣的介面而獲得。

介面中的所有方法都是抽像的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。

當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對像上呼叫介面的方法。由於有抽像類,它允許使用介面名作為引用變數的型別。

通常的動態聯編將生效。引用可以轉換到介面型別或從介面型別轉換,instanceof 運算子可以用來決定某物件的類是否實現了介面。

10樓:寧靜の樂章

介面是一種功能上的說明,沒有太大關係的兩個類可以用支援的介面表示它們共同的功能。而繼承自同一抽象類的類則是在一定程度上存在很多共性。比如一個生物類和一個食品類,假設她們都有一個方法用於輸出它們各自的名字,其他的行為和屬性各不相同,你覺得這裡用抽象類繼承它們合適嗎?

C中抽象類和介面的區別,java中抽象類和介面的區別?

c 一 抽象類 抽象類是特殊的類,只是不能被例項化 除此以外,具有類的其他特性 重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能宣告於抽象類中,且不包含任何實現,派生類必須覆蓋它們。另外,抽象類可以派生自一個抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它...

c抽象類內是否要有方法的實現,C 抽象類可以有構造方法嗎,若是有如何實現及呼叫

定義抽象類和抽象方法 abstract 抽象類特點 1 不能初始化的類被叫做抽象類,它們只提供部分實現,但是另一個類可以繼承它並且能建立它們的例項 2 一個抽象類可以包含抽象和非抽象方法,當一個類繼承於抽象類,那麼這個派生類必須實現所有的的基類抽象方法 3 通過宣告派生類也為抽象,我們可以避免所有或...

java中介面和抽象類的區別是什麼

定義的關鍵字 abstract class inte ce 組成 常量,變數,抽象方法,普通方法,構造方法 全域性常量,抽象方法 許可權 可以是各種許可權 只能是public 關係 抽象類可以實現多個介面 介面不能實現抽象類 使用 子類利用extends 子類利用implements實現介面 涉及的...