OOPS中的多態:什麼是多態【詳解】

已發表: 2020-11-24

OOP 中的多態性是不可分割的,也是每一種面向對象編程語言的基本概念。 一個對像或引用基本上可以在不同的實例中採用多種形式。 正如這個詞所暗示的那樣,“poly”的意思是“許多”,而“morph”指向“forms”; 因此,作為一個整體的多態性意味著“具有多種形式的屬性”。

面向對象的編程語言通過單個接口處理類和對象。 它實現了函數重載、覆蓋和虛函數的概念。 此外,它通常用於檢測編程中的繼承。

閱讀:多態性與繼承

目錄

OOP 中的多態性示例

多態性是面向對象編程語言中的一種方法,它根據調用它的對象的類執行不同的事情。 使用多態性,一條消息被發送到多個類對象,每個對像根據類的屬性做出適當的響應。

以下是清楚地解釋多態性的代碼:

使用警告;
# 創建包類
包A;
# 創建構造函數
子新
{
# shift 將取包名
# 並將其分配給變量 'class'
我的 $class = 班次;
我的 $self = {
'名稱' => 班次,
'roll_no' => 班次
};
子方法
{
print("這屬於A類");
}
};
包B;
# @ISA 數組包含一個列表
# 該類的父類,如果有的話
我的@ISA = (A);

子方法
{
print("這屬於 B 類");
}
主包;
B->方法();
A->方法();

輸出:

這屬於B類

這屬於A類

學習構建 Swiggy、Quora、IMDB 等應用程序

解釋

對於第一個輸出,類 B 中定義的 method() 會覆蓋從類 A 繼承的定義,反之亦然。 此屬性可用於擴展任何預先存在的包的功能,而無需重寫整個類的整個定義。 因此,使程序員的工作變得容易,也是被廣泛使用的原因。

Oops 中的多態性類型

在面向對象編程 (OOPS) 語言中,有兩種​​類型的多態性,如下所示:

  1. 靜態綁定(或編譯時)多態性,例如方法重載
  2. 動態綁定(或運行時)多態性,例如,方法覆蓋

資源

1. 編譯時或靜態多態

通過方法重載,在面向對象的編程語言中實現了靜態多態性,允許程序員實現各種方法。 它們使用的名稱可以相同,但參數不同。 某些條件有利於靜態多態性,如下所示:

  • 所有參數的類型應該不同。
  • 參數的順序可以不同。
  • 一種方法的參數數量應與另一種方法不同。

在靜態綁定多態中,匹配類型和參數數量調用重載函數。

  • 由於所有這些信息在編譯期間都可用,因此編譯器會選擇適當的函數。
  • 函數重載可以做到這一點,運算符重載也稱為靜態綁定或早期綁定。

程序

A//基類

{

詮釋一個;

公開

無效顯示()

{

cout<< “A類”

}

};

class B: public A // 派生類

{

詮釋b;

公開

無效顯示()

{

cout<< “B類” ;

}

};

在上述程序中,display() 函數原型在基類和派生類中都是相同的。 因此,此處不能應用靜態綁定。 該程序將在運行時運行得最好,並選擇適當的功能。

  • 在運行時,該語言的編譯器通過識別這些方法的簽名來識別各種方法。
  • 編譯器首先識別方法簽名並在程序編譯期間決定特定方法調用的方法。
  • 編譯時多態的執行要快得多,但過程不是那麼靈活。

另請閱讀: OOPS 面試問題

運行時或動態多態性

在動態多態中,對單個重寫方法的調用在程序運行時解決。 方法覆蓋是運行時多態性的突出例子之一。 在這個過程中,重寫是通過指針和虛函數完成的。

  • 在方法覆蓋中,在父類中存在的子類中聲明單個方法。 子類獲得了一個實現方法。
  • 在運行時多態性期間,類將自己的規範提供給另一個繼承的方法。 這種方法之間的轉移是在不修改父類對象代碼的情況下實現的。

程序

#include <iostream>

使用命名空間標準;

class Animal { // 基類

公開

字符串顏色= “棕色”

};

class Dog: public Animal // 繼承 Animal 類。

{

公開

字符串顏色= “綠色”

};

詮釋主要(無效){

動物d=狗();

cout<<d.color;

}

輸出:

棕色的

  • 運行時多態中,對象的方法在運行時而不是編譯時被調用。
  • 它是通過方法覆蓋實現的,它也被稱為動態綁定或後期綁定。
  • 動態多態性的過程比編譯時多態性相對較慢但靈活。

黑白編譯時和運行時多態性的區別

編譯時多態性運行時多態性
函數調用該函數在編譯時調用。 該函數在運行時調用。
常用術語它被稱為重載、早期綁定和靜態綁定。 它被稱為覆蓋、後期綁定和動態綁定。
方法名稱和參數在重載中,不止一種方法具有相同的名稱,但具有不同數量或類型的參數。 在 Overriding 中,不止一種方法具有相同的名稱、數量和類型的參數。
運營商它是通過函數和運算符重載來實現的。 它是通過虛函數和指針來實現的。
執行時間處理時間它在編譯時執行比運行時多態性更快。 它在運行時執行比編譯時多態性慢。
靈活性它不太靈活,因為一切都在編譯時執行。 它更加靈活,因為一切都在運行時執行。

最後的話

多態性是 OOP 中必須學習的概念,因為它在編程時提供了幾個優點。 使用多態,用戶可以重構測試的類和代碼。 它對於擴展編程本身很有用。 它還允許用戶將多個不同類型的變量(例如 double、Float、Int 或 Long)存儲在單個變量中,以便更輕鬆地搜索和實現它們。

如果您有興趣了解有關 OOP、全棧軟件開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發 PG 文憑,該文憑專為工作專業人士設計,提供 500 多個小時的嚴格培訓、9 個以上的項目和任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。

成為全棧開發人員

升級和 IIIT-BANGALORE 的軟件開發 PG 文憑
了解更多