面試官:什么是多態(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
