c 中抽象類和介面的區別

2021-05-08 09:03:44 字數 1573 閱讀 7217

一、概念

抽象類:顧名思義,抽象類首先是對進行抽象的。而類是對物件進行抽象的 。當設計乙個新的抽象類時,一定是用來繼承的,定義乙個抽象類,但不用來繼承就失去了它的意義了。具體類不是用來繼承的,只有抽象類是用來繼承的。比如:貓,狗,牛,羊,是具體的類,此時可以把這些類的一些共性抽象出乙個動物類,這個動物類就是抽象類。貓,狗,牛,羊繼承動物類。

介面:介面是對行為的抽象,對類的區域性(行為)進行的抽象,而抽象類是對類的整體(字段、屬性、方法)的抽象。如果只關注行為抽象,那麼也可以認為介面就是抽象類。不論是介面、抽象類、類,都是在不同層次、不同角度進行抽象的結果。他們的共性是抽象。

二、語法區別

抽象類:一定要在前面加abstract

abstract class animal  //加abstract關鍵字,表明是抽象類。

protected abstract string getshoutsound();

//在方法返回前加abstract表明此方法是抽象方法,它沒有方法體直接在括號後加;

注意幾點:第一,抽象類不能例項化,「動物「例項化是沒有意義的;第二,抽象方法必須被子類重寫。第三,如果類中包含抽象方法,那麼類就必須定義為抽象類,不論是否還包含其他一般方法;第四,抽象類中可包含非抽象的方法(有具體實現的**);第五,繼承類可以部分實現抽象類中的抽象方法。第六,乙個類只能繼承乙個抽象類。

介面:定義介面加inte***ce

inte***ce ichange//介面名稱前加i表示它是個介面

string changething(string thing);//方法前面不能有任何修飾符

注意幾點:第一,介面不能例項化,不能有構造方法和字段,不能有修飾符,比如public、private等;第二,不能宣告虛擬的或靜態的方法;第三,實現介面的類就必須實現介面中的所有方法和屬性。第四,乙個類可以繼承多個介面,多個類繼承相同的介面。

三、設計的思維角度

從設計的角度講,抽象類是從子類中發現了公共的東西,泛化出父類,然後子類繼承父類。這也體現了敏捷開發的思想,通過重構改善既有**的設計。事實上,只有貓或狗這個類時,你就去設計乙個動物類,很可能就過度設計了。所以說,抽象類往往是通過重構得來的,當然了,如果你事先意識到多種分類的可能,那麼事先就設計出抽象類也完全是可以的。而介面是根本不知道子類的存在的,方法如何實現還不確認,預先定義了。可以這麼說,抽象類是自底而上抽象出來的,而介面是自頂向下設計出來的。實現介面和繼承抽象類並不衝突,比如,我們完全可以讓超人繼承人類,再實現飛行介面(我們平常人是不會飛的)。

C 中抽象類和介面的區別

首先抽象類中有抽象成員和非抽象成員 和普通類成員一樣 而介面的所有成員都必須在實現介面的 類中實現。抽象類可以有自己的字段,但是介面不能有自己的字段,建構函式,析造函式,靜態成員或常量。從用途上來說,抽象類主要是提供為物件系列的基類,共享一些主要特性,使繼承於乙個抽象類的物件都具有乙個共同的目的或者...

C 中抽象類和介面的區別

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

C 中抽象類和介面的區別

大家都容易把這兩者搞混,我也一樣,在聽李建忠老師的設計模式時,他也老把抽象類說成介面,弄的我就更糊塗了,所以找了些網上的資料.一 抽象類 抽象類是特殊的類,只是不能被例項化 除此以外,具有類的其他特性 重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能宣告於抽象類中,且不包含任何實現,...