抽象類(abstract class)和c中的介面#(interface in c#)的區別

抽象類看起來很像介面,但是這個概念對於OOP初學者來說有點混亂。從概念上講,一個抽象類看起來就像一個介面,當然,沒有任何實現,但是它們有各自的區別。雖然抽象類可以部分實現,也可以完全實現,但介面必須完全實現。好吧,兩者之間最顯著的區別是抽象類可以有預設實現,而介面只是只包含成員宣告的方法的定義。讓我們詳細討論一下兩者的理論方面。...

抽象類看起來很像介面,但是這個概念對於OOP初學者來說有點混亂。從概念上講,一個抽象類看起來就像一個介面,當然,沒有任何實現,但是它們有各自的區別。雖然抽象類可以部分實現,也可以完全實現,但介面必須完全實現。好吧,兩者之間最顯著的區別是抽象類可以有預設實現,而介面只是只包含成員宣告的方法的定義。讓我們詳細討論一下兩者的理論方面。

什麼是抽象類(an abstract class)?

抽象類是一種特殊型別的類,它充當其他類的基,不能例項化。抽象類的實現邏輯由其派生類提供。為了使一個類抽象,使用了“abstract”修飾符,這意味著一些缺少的實現需要在從它派生的類中實現。它同時包含抽象成員和非抽象成員。抽象類旨在提供可由多個派生類進一步共享和重寫的基本功能。避免任何型別的程式碼重覆非常有用。它們看起來很像介面,但增加了功能。

抽象類(abstract class)和c中的介面#(interface in c#)的區別

什麼是介面(an interface)?

另一方面,介面不是隻包含功能簽名的類。這是一個沒有實現的模式。從概念上講,它只是包含成員宣告的方法定義。它是一個空shell,不包含其成員的實現。它就像一個抽象基類,只包含抽象成員,如方法、事件、索引器、屬性等,不能直接例項化,其成員可以由任何類實現。另外,一個類可以實現多個介面,但是一個類只能繼承一個類。

抽象類與介面:c語言中抽象類與介面的區別#

  1. 多重繼承–一個類只能使用一個抽象類,因此不支援多重繼承。另一方面,介面可以支援多重繼承,這意味著一個類可以繼承任意數量的繼承。
  2. C#中抽象類和介面的定義——抽象類是一種特殊型別的類,它可能包含沒有實現的定義。實現邏輯由其派生類提供。它可以有抽象方法,也可以有非抽象方法。另一方面,介面只是一種不能做任何事情的模式。從技術上講,這隻是一個空殼。
  3. 實現–抽象類可以同時包含定義和實現。它是一個不完整的類,無法例項化。介面只能有功能的簽名而不需要任何程式碼。
  4. 訪問修飾符–一個抽象類可以有多個訪問修飾符,如sub、函式、屬性等,而介面不允許有訪問修飾符,所有方法都必須隱式定義為public。
  5. 同質性–抽象類用於相同型別、行為和狀態的實現,而介面用於僅共享方法簽名的實現。
  6. 宣告–抽象類充當所有其他類的基類,因此它可以宣告或使用任何變數,而介面不允許宣告任何變數。
  7. 建構函式宣告–雖然抽象類可以有建構函式宣告,但介面不能有建構函式宣告。
  8. 核心與外圍—抽象類用於定義類的核心標識,並可用於相同資料型別的物件。另一方面,介面用於定義類的外圍功能。
  9. 剛性vs.柔性-抽象類在功能方面更為柔性,至少從開發人員的角度來看是這樣,而介面則更為剛性。

抽象類與介面:表形式

抽象類 介面
抽象類可以具有所有訪問修飾符,用於函式、子類和屬性的成員宣告。 介面不允許對函式、子函式、屬性等的成員宣告使用訪問修飾符。所有成員都假定為隱式公共的。
一個類最多隻能使用一個抽象類。 一個類可以繼承任意數量的介面。
抽象類中不支援多重繼承。 介面可以支援多重繼承。
從技術上講,它是一個可能包含或不包含定義及其實現的類。 一個介面只能有功能的簽名,所以它基本上是一個空殼。
抽象類可以包含成員。常量、定義的方法和方法存根。 介面只能包含方法和常量。
它定義類的核心標識,並用於描述相同資料型別的物件。 它用來描述一個類的外圍能力。
抽象類的成員不能是靜態的,除非它是完整的成員。 介面的成員不能是靜態的。
它非常適合於同類和常見行為的實現。 如果幾個實現只共享方法簽名,那麼最好使用介面。
它可以有建構函式宣告。 它不能有建構函式宣告。
抽象類具有預定義的欄位和建構函式。 不能在介面中定義欄位。
它可以有抽象方法和非抽象方法。 它只能有抽象的方法。

總結

抽象類和介面有什麼區別?這可能是任何技術面試中最常見的問題之一。在任何C教程中,您都可能會找到大量關於抽象類和介面的資訊,然而,理解兩者之間的區別是相當困難的。你可以整合所有你能找到的資訊,但仍然無法獲得足夠的資訊。好吧,從概念上來說,這兩個術語都是程式設計中最重要的術語,它們是完全相同的,但是,它們在功能上有很大的不同。抽象類是一種特殊型別的類,它充當其他類的基,而介面則只是一個只有成員宣告的空殼。

  • 發表於 2021-06-25 03:34
  • 閱讀 ( 55 )
  • 分類:科技

你可能感興趣的文章

包裹(package)和java介面(interface in java)的區別

Java中的Package和Interface的主要區別在於,Package有助於對類進行有條理的分類以方便訪問和維護,而Interface則有助於實現多個繼承和實現抽象。 Java是最流行的程式語言之一。Java的主要優點是它支援面向物件程式設計。這種方...

  • 發佈於 2020-10-18 11:01
  • 閲讀 ( 50 )

外面的(out)和參考c#(ref in c#)的區別

...發各種桌面、web和移動應用程式。函式或方法是程式設計中的一個概念。用於執行特定任務的語句組稱為函式或方法。在C程式中,執行從main()開始。這是一個方法的例子。呼叫方法時,資料被傳遞到方法或從方法接收。呼叫...

  • 發佈於 2020-10-18 20:42
  • 閲讀 ( 51 )

壓倒一切(overriding)和c中的過載#(overloading in c#)的區別

...錄 1. 概述和主要區別 2. 在C中重寫是什麼# 3. 什麼是C語言中的過載# 4. C中重寫和過載的相似性# 5. 並排比較-以表格形式在C中重寫與過載 6.摘要 什麼是在c中重寫#(overriding in c#)? 在OOP中還有一個重要的概念是繼承。它使用已經存...

  • 發佈於 2020-10-18 23:50
  • 閲讀 ( 50 )

領域(field)和c屬性#(property in c#)的區別

關鍵區別——c語言中的欄位與屬性# C中field和property的關鍵區別在於,field是直接在類中宣告的任何型別的變數,而property是一個成員,它提供了一種靈活的機制來讀、寫或計算私有欄位的值。 C是微軟開發的一種現代程式語言...

  • 發佈於 2020-10-19 02:36
  • 閲讀 ( 49 )

班(class)和結構(c)#(structure in c#)的區別

關鍵區別——c語言中的類與結構# C是微軟開發的一種現代的、通用的、高階的程式語言。它是一種類似於Java的程式語言。它包含強大的程式設計功能,如委託、索引器和語言整合查詢。C的主要優點是它支援面向物件程式設...

  • 發佈於 2020-10-19 17:15
  • 閲讀 ( 51 )

通用(generic)和c中的非泛型集合#(non-generic collection in c#)的區別

通用(generic)和c中的非泛型集合#(non-generic collection in c#)的區別 泛型集合是一個類,它提供型別安全性,而不必從基集合型別派生並實現特定於型別的成員。非泛型集合是用於資料儲存和檢索的專用類,它提供對堆疊、佇列、...

  • 發佈於 2020-10-24 01:08
  • 閲讀 ( 52 )

代表(delegates)和c中的事件#(events in c#)的區別

代表(delegates)和c中的事件#(events in c#)的區別 C是微軟開發的一種程式語言。它支援結構化程式設計和麵向物件程式設計。委託和事件用於C中的事件驅動程式設計。委託是指向方法的型別安全指標。在具有圖形使用者介面(GUI...

  • 發佈於 2020-10-24 02:21
  • 閲讀 ( 61 )

班(class)和介面(interface)的區別

班(class)和介面(interface)的區別 面向物件程式設計(OOP)是軟體開發中的一種常見正規化。它有助於使用類和物件為程式設計帶來真實的場景。類是建立物件的藍圖。程式設計師可以用屬性和方法建立一個類。學生和老師是客...

  • 發佈於 2020-10-24 04:25
  • 閲讀 ( 56 )

繼承(inheritance)和java介面(interface in java)的區別

繼承(inheritance)和java介面(interface in java)的區別 Java是Sun Microsystems公司開發的一種程式語言。Java可以用來開發各種應用程式。它是一種支援面向物件、結構化等多種正規化的語言,Java的主要優點是支援面向物件程式設計(OOP)...

  • 發佈於 2020-10-25 00:02
  • 閲讀 ( 64 )

關於javarmi註冊中心以及如何使用它的所有內容

... import java.rmi.Remote;import java.rmi.RemoteException;public interface Greeting extends Remote{ public String greet(String name) throws RemoteException;} ...

  • 發佈於 2021-03-12 15:58
  • 閲讀 ( 61 )
ghze1559
ghze1559

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦