多態的實現原理

從Java編程思想上看來的,記下來爲以後的儲備基本知識點。



當BirdController調用move()時,不需要編寫處理Bird類的具體類型的代碼就可以發生不同的行爲。


面向對象程序設計的最重要的妙決:

編譯器不可能產生傳統意義上的函數調用,一個非面向對象的編譯器產生的函數調用會引起所謂的前期綁定,這是編譯器會產生一個具體函數的名字的調用,而運行時將這個調用解析到被執行代碼的絕對地址。然而在OOP中,程序直到運行時才能夠確定代碼的地址,所以當消息發送到一個基類對象時,必須採用其他的機制。


面向對象程序設局語言使用了後期綁定的概念,當對象發送消息時,被調用的代碼知道運行時才能確定,編譯器確保被調用方法的存在,並對調用的參數和返回值執行類型檢查,但是不知道被執行的確切的代碼。


爲了執行後期綁定,Java使用了一小段特殊的代碼來替代絕對地址,這段代碼使用在對象中存儲的信息來計算方法體的地址,這樣,根據這一小段代碼的內容,每個對象都可以具有不同的行爲表現,當向一個對象發送消息時,該對象就能夠知道這條消息要做什麼。


C++用virtual關鍵字來實現後期綁定,默認是不是動態綁定的,而Java中動態綁定是默認的行爲.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章