多態(tài)的作用——通用性
把不同的子類對(duì)象都當(dāng)作父類來(lái)看,可以屏蔽不同子類對(duì)象之間的差異,寫出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。 賦值之后,父對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性以不同的方式運(yùn)作。也就是說(shuō),父親的行為像兒子,而不是兒子的行為像父親。 舉個(gè)例子:從一個(gè)基類中派生,響應(yīng)一個(gè)虛命令,產(chǎn)生不同的結(jié)果。 比如從某個(gè)基類繼承出多個(gè)對(duì)象,其基類有一個(gè)虛方法Tdoit,然后其子類也有這個(gè)方法,但行為不同,然后這些子對(duì)象中的任何一個(gè)可以賦給其基類的對(duì)象,這樣其基類的對(duì)象就可以執(zhí)行不同的操作了。實(shí)際上你是在通過(guò)其基類來(lái)訪問(wèn)其子對(duì)象的,你要做的就是一個(gè)賦值操作。 使用繼承性的結(jié)果就是可以創(chuàng)建一個(gè)類的家族,在認(rèn)識(shí)這個(gè)類的家族時(shí),就是把導(dǎo)出類的對(duì)象當(dāng)作基類的對(duì)象,這種認(rèn)識(shí)又叫作upcasting。這樣認(rèn)識(shí)的重要性在于:我們可以只針對(duì)基類寫出一段程序,但它可以適應(yīng)于這個(gè)類的家族,因?yàn)榫幾g器會(huì)自動(dòng)就找出合適的對(duì)象來(lái)執(zhí)行操作。這種現(xiàn)象又稱為多態(tài)性。而實(shí)現(xiàn)多態(tài)性的手段又叫稱動(dòng)態(tài)綁定(dynamic binding)。 簡(jiǎn)單的說(shuō),建立一個(gè)父類的對(duì)象,它的內(nèi)容可以是這個(gè)父類的,也可以是它的子類的,當(dāng)子類擁有和父類同樣的函數(shù),當(dāng)使用這個(gè)對(duì)象調(diào)用這個(gè)函數(shù)的時(shí)候,定義這個(gè)對(duì)象的類(也就是父類)里的同名函數(shù)將被調(diào)用,當(dāng)在父類里的這個(gè)函數(shù)前加virtual關(guān)鍵字,那么子類的同名函數(shù)將被調(diào)用。