java中多态的理解

java中多态的理解
在处理类型的层次结构时,经常想把一个对象不当作它所属的特定类型来对待,而是当做其基类的对象来对待,这就使得程序员不得不编写依赖于特定对象的代码,
几何形例子:
方法操作的都是泛化的形状,不用去在意这个几何形式圆形,方形等,所有的几何形都可以被移动,擦除,绘制,所以这些方法都是直接对几何形对象放消息,而不需要知道这个几何形对象到底是怎么处理消息,
这样的好处当你添加了一个新的几何形类型,而不需要修改处理泛化几何形的方法,这样可以改善我们的设计,减少软件维护的代价,
那么问题来了,当把某一对象当做泛化对象来看待时,当执行某一方法时,编译器是怎么知道执行那一快代码呢?
这个问题的答案也是面向对象设计中的重要思想:编译器不可能产生传统意义上的函数调用,对于一个非面向对象编程语言产生函数调用会引起所谓的"前期绑定",这样做就意味着,编译器将产生对一个具体函数的名字的调用,而运行时将这个调用解析到将要执行的代码的绝对地址,然而在oop中,程序知道运行时才能确定代码的地址,所以当消息发送到一个繁华对象时,必须要采用其他的机制
为了解决这个问题.面向对象语言采用了后期绑定的概念.当向对象发送消息时.被调用的代码知道运行时才能确定.编译器只需要确定被调用方法的存在,并对调用方法的参数和返回类型进行检查即可,
为了执行后期绑定,java中使用了一小段代码来替代绝对地址调用,这段代码的核心是根据对象中存储的信息来计算方法体存储的地址.这样每一个对象就具有不同的行为表现,当向一个对象发送消息,该对象就知道该做什么.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值