什么是多態(tài)?實(shí)現(xiàn)多態(tài)的機(jī)制是什么?

面試官:什么是多態(tài)呢?
豬隊(duì)友:多種形態(tài),氣體,液體,固體~
面試官:go out! now!


到底什么是多態(tài)呢?

官方說(shuō):

  • 接口的多種不同的實(shí)現(xiàn)方式即為多態(tài)。
  • 多態(tài)性是允許你將父對(duì)象設(shè)置成為一個(gè)或更多的他的子對(duì)象相等的技術(shù)。
  • 我們?cè)诔绦蛑卸x的引用變量所指向的具體類型和通過(guò)該引用變量的方法調(diào)用在編程的時(shí)候并不確定,當(dāng)處于運(yùn)行期間才確定。就是這個(gè)引用變量究竟指向哪一個(gè)實(shí)例對(duì)象,在編譯期間是不確定的,只有運(yùn)行期才能確定,這樣不用修改源碼就可以把變量綁定到不同的類實(shí)例上,讓程序擁有了多個(gè)運(yùn)行狀態(tài),這就是多態(tài)。


說(shuō)人話:

允許將子類類型的指針賦值給父類類型的指針,把不同的子類對(duì)象都當(dāng)作父類來(lái)看。比如你家有親屬結(jié)婚了,讓你們家派個(gè)人來(lái)參加婚禮,邀請(qǐng)函寫的是讓你爸來(lái),但是實(shí)際上你去了,或者你妹妹去了,這都是可以的,因?yàn)槟銈兇淼氖悄惆?,但是在你們?nèi)ブ八麄円膊恢勒l(shuí)會(huì)去,只知道是你們家的人??赡苁悄惆职?,可能是你們家的其他人代表你爸參加。這就是多態(tài)。

多態(tài)又分為 編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。
編譯時(shí)多態(tài):比如重載
運(yùn)行時(shí)多態(tài):比如重寫

多態(tài)的實(shí)現(xiàn)機(jī)制

簡(jiǎn)單版本:

原理也很簡(jiǎn)單,父類或者接口定義的引用變量可以指向子類或者具體實(shí)現(xiàn)類的實(shí)例對(duì)象,由于程序調(diào)用方法是在運(yùn)行期才動(dòng)態(tài)綁定的,那么引用變量所指向的具體實(shí)例對(duì)象在運(yùn)行期才確定。所以這個(gè)對(duì)象的方法是運(yùn)行期正在內(nèi)存運(yùn)行的這個(gè)對(duì)象的方法而不是引用變量的類型中定義的方法。

術(shù)語(yǔ)版本:

我們將引入Java靜態(tài)分派和動(dòng)態(tài)分派這個(gè)概念。

  • 靜態(tài)分派:所有依賴靜態(tài)類型來(lái)定位方法執(zhí)行版本的分派動(dòng)作。靜態(tài)分派發(fā)生在編譯階段,因此確定靜態(tài)分派的動(dòng)作實(shí)際上不是由虛擬機(jī)來(lái)執(zhí)行的,而是由編譯器來(lái)完成。(編譯時(shí)多態(tài))
  • 動(dòng)態(tài)分派:在運(yùn)行期根據(jù)實(shí)際類型確定方法執(zhí)行版本的分派動(dòng)作。(運(yùn)行時(shí)多態(tài))

如果想深入的同學(xué)可以參考可以參考《深入理解Java虛擬機(jī)》。

參考:
https://blog.csdn.net/sunxianghuang/article/details/52280002

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容