在处理类型的层次结构时,经常想把一个对象不当作它所属的特定类型来对待,而是将其当作基类的对象来对待。这使得人们可以编写出不依赖于特定类型的代码。基类方法的操作都是泛化(generic)的。
这样的代码是不会受添加新类型影响的,而且添加心类型是扩展一个面向对象程序以便处理新情况的最常用方式。这种能力可以极大地改善我们的设计,同时也降低软件维护的代价
泛化的关键在于:当发送泛化方法的消息时,程序员并不想知道是哪一段代码将被执行。
如果不需要知道哪一段代码会被执行,那么当添加心的子类型时,不需要更改调用它的方法,它就能够执行不同的代码。但是问题是编译器uu发精确地了解哪一段代码将会执行,那么它该怎么办呢?
这个问题的答案,也是面向对象程序设计的最重要的妙诀:编译器不可能产生传统意义上的函数调用。为了解决这个问题,面向对象程序设计语言使用了后期绑定的概念。当想对象发送消息时,被调用的代码知道运行时才能确定。
为了执行后期绑定,Java使用一小段特殊的代码来替代绝对地址调用。这段代码使用在对象中存储的信息来计算方法体的地址。Java中,动态绑定是默认行为,不需要添加额外的关键字来实现多态。
下面通过几何形状(Shape)的例子来说明:
void doSomething(Shape shape) {
shape.erase();
//...
shape.draw();
}
这个方法可以与任何Shape对话,因此他是独立于任何要绘制和擦除的对象的具体类型的。
Circel circle = new Circle();
Triangle triangle = new Triangle();
Line line = new Line();
doSomething(circle);
doSomething(triangle);
doSomething(line);
对doSomething的调用会自动地正确处理,而不用管对象的确切类型。当Circle被传入到语气接收Shape的方法中,究竟会发生什么?由于Circle可以被doSomething()看作是Shape,也就是说,doSomething()可以发送给Shape的任何消息,Circle都可以接收,那么,这么做就是完全安全且合乎逻辑的。
doSomething()的代码给人印象深刻之处在于,不知何故,它总是做了该做的。调用Circle的draw()方法所执行的代码与调用Square或是Line的draw()方法所执行的代码是不同的。正是多态才使得事情总是能够被正确处理。编译器和运行系统会处理相关的细节,你需要马上知道的只是事情会发生,更重要的是怎样通过利用它来进行设计。
本文首发自:对象导论笔记-第三天-蜘蛛网间
分享到:
相关推荐
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析
JAVA面向对象基础测试题-继承-封装-多态等测试题.docx
Java ------ 多态作业
Python工具箱.zip - 办公自动化、多态文件搜索、高级加密。Python工具箱.zip - 办公自动化、多态文件搜索、高级加密。Python工具箱.zip - 办公自动化、多态文件搜索、高级加密。Python工具箱.zip - 办公自动化、多态...
第8章--virtual函数与多态
【IT十八掌徐培成】Java基础第06天-03.多态-类多态-接口多态-同名属性问题.zip
Python自学教程-04-代码实现多态.ev4.rar
java基础_继承封装 多态,概念的梳理,对初学者很有帮助,看一遍就清楚了
Java基础精品课11-多态录屏5.多态调用演示.mp4
day10-final、接口、多态.pdf
11_面向对象_第3天(接口多态)_讲义共6页.pdf.zip
Objective-C-2.0程序设计-第9章-多态、动态类型和动态绑定PPT课件.ppt
211107-封装、继承、多态、抽象上课讲解案例.rar
purescript-variant, PureScript的多态变体 purescript变体 PureScript的多态变体。安装bower install purescript-variant文档模块文档是发布时的发布。Data.Variant 是PureScr
该方法对强制多态、重载多态、类型参数化多态和包含多态这四种类型的多态进行分析,得出反映类的多态复杂性的量度,即强制多态复杂性(CCPP)、重载复杂性(CMC)、参数多态复杂性(CPMP)、包含多态复杂性(CCTP)...
农业信息系统开发
《java面向对象程序设计-继承和多态》教案全文共5页,当前为第3页。 《java面向对象程序设计-继承和多态》教案全文共5页,当前为第4页。 《java面向对象程序设计-继承和多态》教案全文共5页,当前为第5页。
此代码为51单片机通过定时器控制数码管多态显示,仅供初学者参考。
CTLA-4 +49 基因多态与宫颈癌遗传易感性关系的研究,李华,周翊峰,目的:探讨细胞毒性T淋巴细胞相关抗原4(CTLA-4)编码区49位点基因多态与宫颈癌遗传易感性的关系。方法:收集314例宫颈癌患者和320例�