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