多態性與繼承:多態性與繼承之間的區別 [2022]
已發表: 2021-01-05多態和繼承都是面向對象編程的基本概念。 在現代編程語言中添加對像對我們使用語言的方式以及我們能夠用它們做的事情產生了相當大的影響。 簡而言之,面向對象編程是一組允許程序員使用類並因此基於這些類派生對象的方法。
它旨在模擬現實世界的實體,並使程序員更容易使他們的代碼包含他們編寫代碼的範式。基本上有四個面向對象的編程概念,即繼承、抽象、多態和封裝。 現在,如前所述,每一個想法都可以被認為是任何現代語言的支柱。
回到我們關於多態性與繼承和權責的話題,我們看到了這兩個概念之間的明顯差異。 繼承是允許代碼在相同或不同程序中再次重用的概念。 我們甚至可以通過保留我們喜歡的東西並丟棄那些對我們試圖完成的任務無用的東西來改變代碼的行為方式。 繼承節省了大量時間來開發我們現在在數字顯示器上看到的幾乎所有東西。
另一方面,多態負責指示已經編寫的代碼,並根據特定參數實時決定需要執行哪種代碼。 在討論多態性和繼承之間的區別之前,首先詳細了解每個概念對任何人都是有益的。 一旦我們知道繼承和多態的確切含義,差異將變得更加明顯。
從世界頂級大學獲得軟件工程學位。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。
目錄
遺產
在編程範式中不將繼承視為一個非常重要的 OOP 概念將是一種犯罪。 繼承的重要性絕不能掉以輕心,因為繼承的目的是“可重用性”。 顧名思義,繼承的作用是允許將編寫在一個類中的代碼擴展到另一個類。 因此,在繼承中,存在一個基類; 編寫代碼的類將被重用。

我們將創建的下一個類必須從這個基類繼承,才能使用與基類關聯的所有函數和變量。 每當一個類獲取另一個類的屬性(或從不同類繼承)時,基類中存在的所有成員都將成為這個新派生類的成員。
下面給出的示例代碼將向您展示一般繼承形式的樣子。 這裡要注意的一件關鍵事情是,您必須編寫以啟用代碼繼承的確切語法將完全取決於您選擇的編程語言。
- 類派生類名:訪問說明符基類名{
- // 派生類的主體
- }
在上面顯示的示例中,某些事情需要稍微解釋一下。 “訪問說明符”一詞表示派生類訪問基類的屬性和方法的方式。 通常有三個訪問說明符,每個都有自己的含義(即私有、公共和受保護)和屬性。
再一次,根據您選擇的語言,您可能需要也可能不需要使用這些訪問說明符。 因此,在 C++ 的世界中,如果您在默認情況下不指定任何內容進行繼承,它就會變為私有。 但是,如果您從結構繼承(通過關鍵字 struct),則默認訪問說明符將是 public 而不是 private。
閱讀: R 編程語言的職業機會
當您進行繼承時,C++ 還為您提供了許多可供選擇的選項。 您會在下面找到其中一些:
一種。 分層繼承:這種類型的繼承遵循的規則應該只有一個超類,並且從那個超類必須有許多派生的子類。 您將在下面找到它的一個示例:
- //基類
- A級
- {
- 公共無效樂趣A()
- {
- //
- }
- }
- //派生類
- B類:A
- {
- 公共無效樂趣B()
- {
- //
- }
- }
- //派生類
- C類:A
- {
- 公共無效函數C()
- {
- //
- }
- }
- //派生類
- D類:C
- {
- 公共無效funD()
- {
- //
- }
- }
- //派生類
- E類:C
- {
- 公共無效樂趣()
- {
- //
- }
- }
- //派生類
- F級:B
- {
- 公共無效funF()
- {
- //
- }
- }
- //派生類
- G類:B
- {
- 公共無效funG()
- {
- //
- }
- }
灣。 多重繼承:如果你正在做多重繼承,那意味著你只有一個從多個超類繼承的派生子類。 您將在下面找到一個簡單的多重繼承示例:
- //基類
- A級
- {
- 公共無效樂趣A()
- {
- //
- }
- }
- //基類
- B類
- {
- 公共無效樂趣B()
- {
- //
- }
- }
- //派生類
- C類:A、B
- {
- 公共無效函數C()
- {
- //
- }
- }
C。 單一繼承:這可能是最簡單的繼承形式。 只有一個基類和一個派生類。 您將在下面找到一個示例:
- //基類
- A級
- {
- 公共無效樂趣A()
- {
- //去做:
- }
- }
- //派生類
- B類:A
- {
- 公共無效樂趣B()
- {
- //去做:
- }
- }
多態性
多態性一詞的基本定義意味著具有多種形式。 這個定義非常準確地解釋了編程上下文中的多態性。 在這種範式中,多態性具有一種功能但多種形式的含義。 多態性實際上發生在編譯時。 由於重載的概念,編譯時的多態性才成為可能,而在運行時,覆蓋的特性使多態性成為現實。 讓我們一一解決重載和覆蓋的定義。

重載要求您編寫的代碼或類的函數多次編寫,具有不同的參數但具有相同的返回類型。 這意味著您傳遞給函數的參數可以不同,只需查看在運行時傳遞給函數的最終值,就可以決定調用哪種形式的函數。 通常,我們看到類構造函數是重載最多的函數。 所有這些理論都會變得更加清晰,並且借助示例更容易讓您在腦海中根深蒂固。
- 類重載{
- 整數a,b;
- 民眾:
- int重載(int x){ // 第一個重載() 構造函數
- a=x;
- 返回一個;
- }
- int重載(int x, int y){ //第二個重載() 構造函數
- a=x;
- b=y;
- 返回 a*b;
- }
- };
- 詮釋主要(){
- 過載 O1;
- O1。 過載(20); //第一個重載()構造函數調用
- O1。 過載(20,40); // 第二次重載()構造函數調用
在這個例子中,我們看到了重載的作用。 根據對象的括號的最終值是一個整數還是兩個,看看如何調用不同的構造函數。
讓我們接下來解決 Overriding 的定義。 您只能對那些繼承的特定功能執行覆蓋。 是的,繼承是使函數覆蓋成為可能的關鍵點。 如果你想編寫一個函數並重寫它,在 C++ 中你必須在函數定義之前使用關鍵字 virtual,而在派生類中為你的函數使用相同的名稱,只需刪除 virtual 關鍵字。 為了鞏固你的理解,這裡有一個例子:
- 類基{
- 民眾:
- virtual void funct (){ //基類的虛函數
- cout<<“這是一個基類的funct()”;
- }
- };
- 類派生1:公共基礎{
- 民眾:
- void funct (){ //派生1類中重新定義的基類虛函數
- cout<<“這是一個派生類的funct()”;
- }
- };
- 主函數( )
- {
- 基 *p, b;
- 派生1 d1;
- *p=&b;
- p->函數(); //調用基類func()。
- *p=&d1;
- 返回0;
- }
看看在基類中是如何使用關鍵字 virtual 的,在派生類中,相同的函數定義存在,只是關鍵字 virtual 不存在。
多態性和繼承之間的一些顯著差異:
- 繼承本質上是創建一個類,然後讓程序中的其他類從已經存在的基類中獲取它們的特性。 然而,多態性是一個界面,因為是一個界面,它可以採取不同的形狀和形式。
- 繼承是僅與類有關的屬性,而多態性將其自身擴展到任何方法和/或函數。
- 繼承允許派生類使用基類中聲明的所有函數和變量,而無需再次顯式定義它們。 這就是為什麼我們說繼承增加了代碼的可重用性並減少了代碼的長度,如果沒有繼承,我們將不得不編寫代碼。 然而,多態性允許相同的函數名稱具有兩個非常不同的代碼。 因此,從某種意義上說,多態性並沒有減少我們必須編寫的代碼的長度,而是進一步擴展了它。
- 繼承可以採取多種形式; 你可以通過繼承真正發揮創造力。 然而,多態性只能通過兩種方式來實現,即重載和覆蓋。 在使用多態性時你仍然會非常瘋狂,但是你只能通過兩種方式在你的代碼中實現它。
必讀:必讀 47 OOPS 面試問答
多態性與繼承:表格分化
在下表中,您會發現多態性和繼承之間的明顯區別:

比較措施 | 遺產 | 多態性 |
兩者的根本區別 | 繼承的含義是創建具有屬性的新類(現有類的函數和變量) | 它本質上是一個允許以不同形式編寫代碼的平台。 |
它們都可以集成到您的代碼中的方式的差異 | 只有類才能在代碼中享受真正的繼承。 | 它可以在整個代碼中由任何函數和/或方法實現和使用。 |
兩者可以使用的方式不同。 | 它使編寫的代碼能夠在相同或不同的程序中重用。 沒有它,面向對象的編程將缺少一個關鍵特性。 | 它允許聲明的對象決定調用哪種形式的函數。 有兩次可以決定這一點。 在運行時,它被稱為覆蓋; 在編譯時,它被稱為重載。 |
他們都可以採取不同的形式 | 繼承可以採取多種形式。 | 多態性只能有兩種形式。 根據程序中的時間,它從重載變為覆蓋。 |
一個基本示例,展示了它們中的每一個是如何實現的。 | 自行車類可以繼承自兩輪車輛類,而兩輪車輛又可以是車輛的子類。 | 自行車類可以有一個名為 set_color() 的方法,它根據您輸入的顏色名稱更改自行車的顏色。 |
查看:什麼是 Java 中的類型轉換 | 作為初學者理解類型轉換
結論
可以肯定地說,多態性和繼承都是使任何程序成為現實的關鍵概念。 它們都是面向對象編程思想的基礎。 多態性和繼承之間存在許多差異,因為它們服務於兩個非常不同的目的。
多態性允許程序員編寫函數的多個定義。 同時,繼承使用戶能夠重用已經編寫好的代碼。 為了充分理解和理解這兩個概念,建議您進一步閱讀這兩個主題。
每當您編寫代碼時,您應該始終牢記的一件事是,如果您希望重構您已經編寫的代碼(基本上是一個類的定義並在您的代碼中再次使用它來提供類似或不同的服務)目的),你應該利用繼承。 如果您希望減少代碼中的整體混亂並希望使用相同名稱的函數來執行類似的任務,則應該使用多態性。
如果您有興趣了解有關全棧軟件開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發 PG 文憑,該文憑專為在職專業人士設計,提供 500 多個小時的嚴格培訓、9 個以上的項目,以及任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。
