我理解的java多态

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()找到,进而被正确调用。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值