我理解的java多态

来源:互联网 发布:我国机电产品出口数据 编辑:程序博客网 时间:2024/06/17 18:30

java多态可以改善nxin代码的组织结构和可读性;有利于创建可扩展的程序

java的多态是建立在后期绑定技术(运行时绑定)的基础上的。《java编程思想》中有提到这种技术的基本原理是在对象中安置某种“类型信息”,而java除了少量的前期绑定外基本上都是后期绑定。

假设有一个基类CShape,它有一个抽象方法draw() ,Circle类从CShape继承而来并实现了自己的draw()。通常可以见到 以下写法:

CShape s=new Circle();

为什么可以这么做?

可以认为在子类Circle的实例中隐藏着一个CShape实例。因此这个实例s其实有两种类型信息——CShape和Circle, 因此用父类的引用去接收子类是可以的。s的内存模型可以简单的理解如下:


如果调用s.draw()方法。因为s是CShape类型的 引用。 因此调用应该是CShape.draw()。但是。。。与C++类似,由于声明了这个draw()是abstract,因此这个基类CShape中还维护着一个类似虚函数表的东西,经过往下查找,与s中存放的“类型信息”相匹配的那个draw()找到,进而被正确调用。

以上理解并不一定是具体实现,仅供理解时参考。

 

0 0
原创粉丝点击