2006年12月25日
學(xué)c++和java那么久了,但是覺(jué)得自己一直對(duì)封裝,繼承,多態(tài)性這三個(gè)面向?qū)ο蟮年P(guān)鍵特征一直不是很

了解。其實(shí)應(yīng)該說(shuō)是自己以為了解了,但是找實(shí)習(xí)時(shí),筆試才知道,面對(duì)這些基本得不能再基本的題目,

自己卻答不出來(lái),猛然發(fā)覺(jué),原來(lái)是自己根本就還沒(méi)有理解透徹?。。?/font>

一、先用自己的語(yǔ)言概括一下“多態(tài)性”吧:

多態(tài)性是指在繼承層次或者接口與實(shí)現(xiàn)類層次上,如果子類覆蓋了父類的方法,或者說(shuō)實(shí)現(xiàn)類實(shí)現(xiàn)了接口

定義的方法,那么可以通過(guò)一般化的用父類或者接口來(lái)調(diào)用該方法,JVM在運(yùn)行期能夠根據(jù)實(shí)際傳遞的子

類對(duì)象引用,來(lái)調(diào)用相應(yīng)的方法,產(chǎn)生正確的行為。達(dá)到“同一函數(shù),不同行為”的效果。java的多態(tài)性

是通過(guò)動(dòng)態(tài)綁定實(shí)現(xiàn)的。

例如,類A中有一aa()方法,類B和類C繼承類A,并覆蓋了類A的aa()方法,這時(shí)在程序中,如果用類A的引

用a調(diào)用aa方法:a.aa(),JVM會(huì)根據(jù)動(dòng)態(tài)綁定機(jī)制,根據(jù)a的實(shí)際類型調(diào)用相應(yīng)方法;如果a=new B(),那

么調(diào)的是B的方法;如果a=new C(),那么調(diào)的是C的方法。

二、上述概念包含幾個(gè)關(guān)鍵點(diǎn):
首先是多態(tài)性的前提:
1.在繼承層次或者接口與實(shí)現(xiàn)類層次上才有多態(tài)性;
2.子類覆蓋了父類的方法,或者實(shí)現(xiàn)類實(shí)現(xiàn)了接口定義的方法,才有多態(tài)性;

其次是多態(tài)性的表現(xiàn):
1.可以通過(guò)一般化的用父類或者接口來(lái)調(diào)用某一方法,JVM在運(yùn)行期能夠根據(jù)實(shí)際傳遞的子類對(duì)象引用,

來(lái)調(diào)用相應(yīng)的方法,從而產(chǎn)生正確的行為。

最后是多態(tài)性的實(shí)現(xiàn)原理:
1.java多態(tài)性是通過(guò)函數(shù)的動(dòng)態(tài)綁定機(jī)制實(shí)現(xiàn)的;

至于動(dòng)態(tài)綁定的機(jī)制是什么,請(qǐng)看下一篇文章“java動(dòng)態(tài)綁定機(jī)制”。

有待查看的資料:
1.C++的書;(java的書中只對(duì)多態(tài)性進(jìn)行闡述,但是很少對(duì)多態(tài)性的概念作出解釋,好像C++中的書中有

概念)

2.《core java》


參考資料:
1.簡(jiǎn)單的理解 類的繼承 和 多態(tài)性
http://bbs.nou.com.cn/thread-93841-1-1.html

2.JAVA中動(dòng)態(tài)性實(shí)例解釋
http://dev.csdn.net/article/12/12550.shtm