第12章(1 / 18)

加入书签 本章报错

Java编程思想强烈推荐:

方法。但更重要的一点或许是:这样做可以有效地“关闭”动态绑定,或者是想告诉编译

器不需要对其进行动态绑定。这样,编译器就可以为final方法调用生成更有效的代码。然

importuceeckelsimpletest;๙

publicclasstooltest{

第四章初始化与清除

随着计算机革命的展,“不安全”的编程方แ式已๐逐渐成为编程代价高昂的主因之一。

同一段落,置于生成的html中。

@sincນe

使用virtual关键字来实现的。在这些语言中,方แ法在缺省情况下不是动态绑定的。而在jaທva

中,动态绑定是缺省行为,你不需要添加额外的关键字来实现多态poly摸rphism。

编写出健壮的、高效的、灵活的程序是jaທva程序员们面临ภ的重大挑战。

《java编程思想》就是一本能ม够让jaທva程序员轻松面对这一挑战,并最终取得胜利的

multipleinterfaces

interfaທ9fight{

voidfight;๙

}

interfa99im{

void9im;๙

}

interfaທ9fly{

voidfly;

}

9chaທracter{

pubຘlicvoidfight{}

}

9๗dsa9character

implements9fly{

publicvoid9im{}

publicvoidfly{}

}

pubຘli9ture{

pubຘli9๗fightx{xfight;}

publi99๗imx{9im;๙}

publi9๗flyx{xfly;}

publi9characterx{xfight;}

publi9stringaທrgs{

heroh=ne9hero;

th;treatitasa9๗fight

uh;treaທtitasa9๗9๗im

vh;treatitaທsa9fly

9๗h;treaທtitasana9cນharacter

}

}:~

你可以看到,hero组合了具体类a9๗fight、9fly。

当你要通过这种方式将一个具体类和多个接口组合到เ一起时,这个ฐ具体类必须是先行,后面

跟着的才是接口。否则编译器会报错。

注意,9characນter类中的fight方法的签名是一样的,而且,在hero

中并没有fight的定义。接口的规则是:你可以从接口中继承就像稍后你会看到的那ว

样,但是你得到的只是另一个接口。如果你想创建该新类型的对象,就必须有一个了

其全部ຖ定义的类。即使hero没有显式地fight的定义,其定义也随a9cນharacນter

而存在,因此它是被自动的,这使得创建hero对象成为了可能。

在adventure类中,你可以看到有四个方法把上述各种接口和具体类作为ฦ参数。当hero对

象被创建时,它可以被传递给这些方แ法中ณ的任何一个ฐ,这意味着它依次被向上转型为每一个ฐ

接口。由于java中这种接口设计的方แ式,使得这项工作并不需要程序员一方แ付出任何特别

的努力。

一定要记住,前๩面的例子所展示的就是使用接口的核心原因:为了能够向上转型为不止一个ฐ

的基类型。然而,使用接口的第二个原因却是与使用抽象基类相同:防止客户端程序员创建

该类的对象,并确保这仅仅是建立一个ฐ接口。这就带来了一个问题๤:我们应该使用接口还是

抽象类?接口为ฦ你带来了使用抽象类的好处,并且还带来了使用接口的好处,所以如果你要

创建不带任何方法定义和成员变量的基类,那么เ你应该选择接口而不是抽象类。事实上,如

果你知道某事物应该成为ฦ一个ฐ基类,那么你的第一选择应该是使它成为ฦ一个接口,只有在强

↑返回顶部↑

书页/目录

Java编程思想