本文總結了在 c# 當中,介面與抽象類的一些異同,來與大家共享。
(1) 抽象方法只作宣告,而不包含實現,可以看成是沒有實現體的虛方法
(2) 抽象類不能被例項化
(3) 抽象類可以但不是必須有抽象屬性和抽象方法,但是一旦有了抽象方法,就一定要把這個類宣告為抽象類
(4) 具體派生類必須覆蓋基類的抽象方法
(5) 抽象派生類可以覆蓋基類的抽象方法,也可以不覆蓋。如果不覆蓋,則其具體派生類必須覆蓋它們。
(1) 介面不能被例項化
(2) 介面只能包含方法宣告
(3) 介面的成員包括方法、屬性、索引器、事件
(4) 介面中不能包含常量、字段(域)、建構函式、析構函式、靜態成員。
(5) 介面中的所有成員預設為public,因此介面中不能有private修飾符
(6) 派生類必須實現介面的所有成員
(7) 乙個類可以直接實現多個介面,介面之間用逗號隔開
(8) 乙個介面可以有多個父介面,實現該介面的類必須實現所有父介面中的所有成員
(1) 都可以被繼承
(2) 都不能被例項化
(3) 都可以包含方法宣告
(4) 派生類必須實現未實現的方法
(1) 抽象基類可以定義字段、屬性、方法實現。介面只能定義屬性、索引器、事件、和方法宣告,不能包含字段。
(2) 抽象類是乙個不完整的類,需要進一步細化,而介面是乙個行為規範。微軟的自定義介面總是後帶able欄位,證明其是表述一類「我能做。。。」
(3) 介面可以被多重實現,抽象類只能被單一繼承
(5) 抽象類是從一系列相關物件中抽象出來的概念, 因此反映的是事物的內部共性;介面是為了滿足外部呼叫而定義的乙個功能約定, 因此反映的是事物的外部特性
(6) 介面基本上不具備繼承的任何具體特點,它僅僅承諾了能夠呼叫的方法
(7) 介面可以用於支援**,而繼承並不具備這個特點
(8) 抽象類實現的具體方法預設為虛的,但實現介面的類中的介面方法卻預設為非虛的,當然您也可以宣告為虛的
(9) 如果抽象類實現介面,則可以把介面中方法對映到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現介面中方法
抽象類和介面異同
抽象類 定義 抽象類往往用來表徵對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。用 abstract 修飾的類是抽象類,抽象類是不完整的,它只能用作基類。在物件導向方法中,抽象類主要用來進行型別隱藏和充當全域性變數的角色。特徵 抽象類不能例項化。不能用...
介面和抽象類的異同
相同點 抽象類和介面均包含抽象方法,類必須實現所有的抽象方法,否則是抽象類 抽象類和介面都不能例項化,他們位於繼承樹的頂端,用來被其他類繼承和實現 兩者的區別主要體現在兩方面 語法方面和設計理念方面 語法方面的區別是比較低層次的,非本質的,主要表現在 介面中只能定義全域性靜態常量,不能定義變數。抽象...
抽象類和介面的異同
抽象類 有抽象方法的類必須定義成抽象類,抽象類可以沒有抽象方法 抽象類和介面的相同點 1.代表系統的抽象層,都不能例項化,都能包含抽象方法 用於描述系統提供的服務,不必提供具體實現 2.都可以指向子類 實現類 物件 不同點 1.構造方法 抽象類可以有構造方法,介面中不能有構造方法 2.變數 1 普通...