多態

用手机看条目

出自 MBA智库百科(https://wiki.mbalib.com/)

多態(Polymorphism)

目錄

什麼是多態

  多態指同一個實體同時具有多種形式。它是面向對象程式設計(OOP)的一個重要特征。如果一個語言只支持類而不支持多態,只能說明它是基於對象的,而不是面向對象的。C++中的多態性具體體現在運行和編譯兩個方面。運行時多態是動態多態,其具體引用的對象在運行時才能確定。編譯時多態是靜態多態,在編譯時就可以確定對象使用的形式。同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。

  多態按字面的意思就是“多種狀態”。在面向對象語言中,介面的多種不同的實現方式即為多態。引用Charlie Calverts對多態的描述——多態性是允許你將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作(摘自“Delphi4編程技術內幕”)。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。多態性在Object Pascal和C++中都是通過虛函數(Virtual Function)實現的。

  多態:同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。

  C++中,實現多態有以下方法:虛函數,抽象類,重載,覆蓋,模版。

  多態也指生物學中腔腸動物的特殊的生活方式。水螅態與水母態的世代交替現象。

多態主要作用

  把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用代碼,做出通用的編程,以適應需求的不斷變化。

  賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。也就是說,父親的行為像兒子,而不是兒子的行為像父親。

  舉個例子:從一個基類中派生,響應一個虛命令,產生不同的結果。

  比如從某個基類繼承出多個對象,其基類有一個虛方法Tdoit,然後其子類也有這個方法,但行為不同,然後這些子對象中的任何一個可以賦給其基類對象的引用,或者將子對象地址賦給基類指針,這樣其基類的對象就可以執行不同的操作了。實際上你是在通過其基類來訪問其子對象的,你要做的就是一個賦值操作。

  使用繼承性的結果就是可以創建一個類的家族,在認識這個類的家族時,就是把導出類的對象當作基類的對象,這種認識又叫作upcasting。這樣認識的重要性在於:可以只針對基類寫出一段程式,但它可以適應於這個類的家族,因為編譯器會自動就找出合適的對象來執行操作。這種現象又稱為多態性。而實現多態性的手段又叫稱動態綁定(dynamic binding)。

  簡單的說,建立一個父類的對象,它的內容可以是這個父類的,也可以是它的子類的,當子類擁有和父類同樣的函數,當使用這個對象調用這個函數的時候,定義這個對象的類(也就是父類)里的同名函數將被調用,當在父類里的這個函數前加virtual關鍵字,那麼子類的同名函數將被調用。

本條目對我有幫助1
MBA智库APP

扫一扫,下载MBA智库APP

分享到:
  如果您認為本條目還有待完善,需要補充新內容或修改錯誤內容,請編輯條目

本条目由以下用户参与贡献

刘维燎,苏青荇.

評論(共0條)

提示:評論內容為網友針對條目"多態"展開的討論,與本站觀點立場無關。

發表評論請文明上網,理性發言並遵守有關規定。

打开APP

以上内容根据网友推荐自动排序生成