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