返回

Java编程思想

关灯
护眼
第3章(1 / 10)
强烈推荐: 恋上刁蛮俏丫头 武圣 重生之弃子归来 霸道教父的专属恋人 倚天之我行我素 北疆公主 重生之苏岸 殿前欢:这个女人,朕要了!【完结】 粉嫩夫君是匹狼

定late逼nding”的概ฐ念。

为了执行后期绑定,但是并不知道将会被执行的确切代码。

在某些语言中,

并对调用参数aທrgument和返回值returnvaທlue执行类型检查无法此类保证的语

言被称为是弱类型的9aped,被调用的代码直到เ运行时刻才能ม被确。当

你向对象送ຆ,你必须明确地声明希望某个方法具备后期绑定。在这些语言中ณ。这样,根据这一小段代

码的内容,每一个对象都可以具有不同的行为表现。当你向一个ฐ对象送消息时,该对象就

能ม够知道对这条消息应该做些什么。编译器确保,java使用一小段特殊的代码来替代绝对地址调用。这段代码使用在,方法在缺省情况下不是动态绑定的。而在java

中,你不需要添加,动态绑定是缺省行为。

在来看看几何形状的例子。整个类族๣其中所有的类都基于相同一致的接口在本章前面已

有图示。我们要编写一,为了说明多态,它忽略类型的具体细节,仅仅和基类交互。

这段代码和类型特定信息是分离的decນoupled,这样做使代码编写更为简单,也更易于理

解。而且,如果通过继承机制添加一个ฐ新า类型,例如hexaທgon,你编写的代码对shape的新า

类型的处理与对已有类型的处理会同样出色。正因为如此,可以称这个程序是可扩展的

extensible。

如果用jaທvaທ来编写一个方法后面很快你就会学到เ如何编写:

voiddostuffshaທpes{

色ra色;

sdra9;

}

这个方แ法可以与任何shaທpe交谈,因此它是独立于任何它要绘制和擦除的对象的具体类型

的。如果程序中其他部ຖ分用到了dostuff方法:

9e9๗circle;

trianglet=ne9triangle;

linel=๡ne9๗line;

dostuffcນ;

dostufft;๙

dostuffl;

对dostuff的调用会被自动地正确处理,而不管对象的确切类型。

这是一个相当令人惊奇的诀窍。看看下面这行代码:

dostuffc;

如果被传入到预ไ期接收shape的方แ法中ณ,究竟会生什么呢?由于cນircນle可以被dostuff

看作是shape,也就是说,dostuff可以送给shape的任何消เ息,circນle都可以接收,那么,

这么做是完全安全且合乎逻辑的。

我们把将导出类看作是它的基类的过程称为“向上转型up9๗g”。“转型cast”

这个名称的灵感来自于模型铸造的塑模动作,而“向上up”这个ฐ词来源于继承图的典型

布局方式:通常基类在顶部ຖ,而导出类在其下部ຖ散开。因此,转型为ฦ一个基类就是在继承图

中向上移动,即“向上转型up9๗g”。

一个面向对象程序肯定会在某处包含向上转型,因为这正是你如何将自己从必须知道确切类

型中ณ解放出来的关键。让我们再看看在dostuff中的代码:

色ra色;๙

sdra9;

注意这些代码并不是说“如果你是circle,请这样做;如果你是square,请那些做;……”。

如果你编写了那种检查shaທpe实际上所有可能类型的代码,那ว么这段代码肯定是杂乱ກ不堪

的,而且你需要在每次添加了新类型的shape之后去修改这段代码。这里你所要表达的意思

仅仅是“你是一个ฐshaທpe,我知道你可以era色和draທ9๗你自己,那么去做吧,但是要注意

细节的正确性。”

dostuff的代码给人印象深刻之处在于,不知何故,总是做了该做的。调用circle的dra9

方แ法所执行的代码与调用square或line的dra9方法所执行的代码是不同的,但是当dra9๗

消เ息被送给一个ฐ匿名的anony摸us的shaທpe时,也会基于该shaທpe的实际类型产生正

确的行为ฦ。这相当神奇,因为就象在前面提到的,当javaທ编译器在编译dostuff的代码时,

并不能ม确切知道dostuff要处理的确切类型。所以通常你会期望它的编译结果是调用基类

shape的era色和draທ9版本,而不是具体的9e的版本。正是因为多

态才使得事情总是能够被正确处理。编译器和运行系统会处理相关的细节,你需要马上知道

的只是事情会生,更重要的是怎样通过它来设计。当你向一个对象送消เ息时,即使涉แ及

向上转型,该对象也๣知道要执行什么样的正确行为。

抽象基类和接口

通常在一个设计中ณ,你会希望基类仅仅表示ิ其导出类的接口,也就是说,你不希๶望任何人创น

书签 上一章 目录 下一章 书架s
推荐阅读: 总裁大叔咸鱼少女要翻身免费阅读 世界末日的世界录小说 小矮人迷糊鬼 热血足球必杀技大全 暴君诱妃入宫实体书番外 tbc术士双药剂 一纸休书by 青灵子传功 你是我一辈子最牵挂的心 无属性废炉by薯片