一敢朱、實(shí)質(zhì)(比較官方的回答)
多態(tài)是指:當(dāng)系統(tǒng)A訪問(wèn)系統(tǒng)B的服務(wù)時(shí),系統(tǒng)B可以通過(guò)多種實(shí)現(xiàn)方式來(lái)提供服務(wù)耙饰,而這一切對(duì)于系統(tǒng)A而言是透明的纹笼。
二、舉例理解
父類:動(dòng)物類苟跪;子類:貓類和狗類廷痘;父類的方法cries()被兩個(gè)子類重寫蔓涧。
現(xiàn)在有一個(gè)功能要實(shí)現(xiàn)發(fā)出某種動(dòng)物的叫聲,動(dòng)物有很多種笋额,我們只需要要這樣寫:
public void animalCries(動(dòng)物 a){
a.cries()
}
在需要?jiǎng)游锇l(fā)聲的時(shí)候直接調(diào)用:
動(dòng)物 a=new 貓();
animalCries(a);
動(dòng)物 b=new 狗();
animalCries(b);
就能不用改動(dòng)原始代碼元暴。編譯時(shí)變量a就被認(rèn)定為代碼中所聲明的動(dòng)物對(duì)象,程序在執(zhí)行的過(guò)程中會(huì)看動(dòng)物a這個(gè)變量引用的到底是貓對(duì)象還是狗對(duì)象兄猩。動(dòng)態(tài)綁定茉盏。
一些需要知道的知識(shí)點(diǎn)
1.向上轉(zhuǎn)型:聲明的變量類型是父類,變量引用的對(duì)象是子類枢冤。(看上去是爸爸鸠姨,仔細(xì)一看是兒子)
2.對(duì)于引用對(duì)象而言,Java編譯器會(huì)按照它聲明時(shí)的類型來(lái)能處理淹真,運(yùn)行時(shí)Java虛擬機(jī)會(huì)按照它實(shí)際引用的對(duì)象來(lái)處理讶迁。
3.在運(yùn)行環(huán)境中,引用類型里的方法和成員變量的綁定是有規(guī)則的:
- 動(dòng)態(tài)綁定:實(shí)例方法的綁定(實(shí)際看變量引用的對(duì)象的類型)
- 靜態(tài)綁定:靜態(tài)方法和成員變量(實(shí)際看變量聲明時(shí)的類型)