"引用"與多型的關係筆試經驗

才智咖 人氣:1.92W

引用是除指標外另一個可以產生多型效果的手段。這意味著,一個基類的引用可以指向它的派生類例項。

"引用"與多型的關係筆試經驗

Class A; Class B : Class A{…}; B b; A& ref = b;

拓展閱讀

以現實情況舉一個例子說明多型的應用:

假設有一個“小提琴演奏者”類,有一個“鋼琴演奏者”類,還有一個“薩克斯演奏者”類。它們都是彈奏樂器的,都繼承自“樂器演奏者”類。“樂器演奏者”類有個方法叫做“演奏”。三種不同的子類有不同的“演奏”方法實現(拉、彈、吹)。

那麼指揮家如果要指揮一個交響樂,那麼有兩個辦法:

一,分別說“小提琴拉起來”、“鋼琴彈起來”、“薩克斯吹起來”

二,只需要說一句“樂器們都演奏起來”

顯然第一種方法是很笨拙的。因為指揮家不需要知道每種樂器演奏者具體怎麼樣去演奏樂器(是吹還是彈還是拉),他只需要指揮就可以了。因此應當採用第二種做法。

那麼如何實現第二種做法呢?那就是把三種樂器演奏者子類看成是“樂器演奏者”父類。指揮家只需要呼叫“演奏”方法就可以了。至於具體是怎麼去演奏,指揮家是不管的。

雖然程式碼上寫的是把具體的'演奏者子類看成了父類,呼叫的是父類的“演奏”方法,但是因為子類繼承了父類的“演奏”方法並且重寫為更加具體的實現(拉或者彈或者吹),建立例項的時候建立的是子類的例項(構造方法是子類的,只不過看成是父類去用),所以實際執行的時候會去呼叫子類的“演奏”方法。因此,究竟是該拉還是該彈還是該吹,指揮家不必在意,這個判斷由java虛擬機器完成了。

這個就是一個多型的應用。

再擴充套件一下,假設以後又多了一種樂器,架子鼓也來了。同樣,架子鼓也是一種樂器。如果不用多型,那麼指揮家的程式碼也又要改了,就要說“架子鼓打起來”,而用多型的話就不用改啦,仍然是“樂器們都演奏起來”。你體會到了嗎?