2006年12月25日
學c++和java那么久了,但是覺得自己一直對封裝,繼承,多態性這三個面向對象的關鍵特征一直不是很

了解。其實應該說是自己以為了解了,但是找實習時,筆試才知道,面對這些基本得不能再基本的題目,

自己卻答不出來,猛然發覺,原來是自己根本就還沒有理解透徹?。?!

一、先用自己的語言概括一下“多態性”吧:

多態性是指在繼承層次或者接口與實現類層次上,如果子類覆蓋了父類的方法,或者說實現類實現了接口

定義的方法,那么可以通過一般化的用父類或者接口來調用該方法,JVM在運行期能夠根據實際傳遞的子

類對象引用,來調用相應的方法,產生正確的行為。達到“同一函數,不同行為”的效果。java的多態性

是通過動態綁定實現的。

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

用a調用aa方法:a.aa(),JVM會根據動態綁定機制,根據a的實際類型調用相應方法;如果a=new B(),那

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

二、上述概念包含幾個關鍵點:
首先是多態性的前提:
1.在繼承層次或者接口與實現類層次上才有多態性;
2.子類覆蓋了父類的方法,或者實現類實現了接口定義的方法,才有多態性;

其次是多態性的表現:
1.可以通過一般化的用父類或者接口來調用某一方法,JVM在運行期能夠根據實際傳遞的子類對象引用,

來調用相應的方法,從而產生正確的行為。

最后是多態性的實現原理:
1.java多態性是通過函數的動態綁定機制實現的;

至于動態綁定的機制是什么,請看下一篇文章“java動態綁定機制”。

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

概念)

2.《core java》


參考資料:
1.簡單的理解 類的繼承 和 多態性
http://bbs.nou.com.cn/thread-93841-1-1.html

2.JAVA中動態性實例解釋
http://dev.csdn.net/article/12/12550.shtm