正在加载图片...
Thinking in Java 3 Edition v(h); Treat it as a canFly w(h); Treat it as an Actioncharacter 可以看到,Hero合并了具体的 Action character类,以及 Can Fight, Can swin和 Can Fly接口。当你用这种方式合并实体类 ( concrete class)和接口的时候,必须将实体类放在前面,然后才是接 口。(否则编译器就会报错。) 注意 Action character类的 fight()方法。它的特征与 interface Can Fight的 fight()方法完全相同,但是Hero没有提供fght()的 定义。 interface的规则是这样的,你可以继承它(马上就会说到),但 是继承下来的还是 interface。如果你想创建一个新类型的对象,那么 这个类型就必须是类,而且还得提供所有定义。尽管Hero没有明确的提 供 fight()的定义,但是 Action character提供了,所以Hero能自 动获得这个方法,并且能创建对象了 Adventure类有四个拿接口和实体类作参数的方法。创建出来的Hero 对象可以被传给其中任何一个方法,也就是说它被依次上传给了各个 interface。这个过程不需要程序员编写特别的代码,这一切要归功于接 口在Java中的设计。 上述程序告诉我们接口的真正目的:能够上传到多个基本类型(base type)。然而,使用接口的第二个理由,实际上是和“把 abstract类用 做基类”完全相同的:就是要禁止客户程序员去创建这个类的对象,并且 重申“这只是一个接口”。这就带来了一个问题:到底是用 interface,还是用 abstract类? interface既给了你 abstract类 的好处,又给了你 interface的好处,因此只要基类的设计里面可以不 包括方法和成员变量的定义,你就应该优先使用 interface。实际上, 如果你知道这样东西可能会是基类的话,你就应该优先考虑把它做成 interface,只有在不得不定义方法或成员变量的情况下,你才能把它改 成 abstract类,或者根据需要改成实体类。 合并接口时的名字冲突 实现多个接口的时候可能会遇到一些小问题。在上述例程中, Can Fight 和 Action character都有一个一摸一样的 void fight()方法。这里 没有问题,因为它们使用的是同一个方法。但是如果不是呢?下面就是 个例子: //: c08: Interfacecollision. java interface Il void f(i interface I2 int f(int i)i] 第7页共47页 www.wgqqh.com/shhgs/tij.html email:shhgs@sohu.comThinking in Java 3 rd Edition ✄ 7 ☎ ✆ 47 ☎ www.wgqqh.com/shhgs/tij.html email:shhgs@sohu.com v(h); // Treat it as a CanFly w(h); // Treat it as an ActionCharacter } } ///:~ ÝE<g H ero °ž,º»( Action Character  Eà Can F igh t Can Swim  Can Fl y  ¡ˆ †µ´°žñ» (concrete cl ass)(M …†ñ»kF¶ ŸZ (Ä9ጺÅÆ) ¹ Action Character ( figh t( )µA()DŽ in terface Can F igh t ( figh t( )µc>‡  H ero œm figh t( )( O4in terface (È9 ¦( ¡ÝEö8A(ÉJº$g )  ö8ŽQ( in terfaceÄÅ¡|123×Âh(¥! YZ ×h…† ೉DmO4ÊË H ero œm$Ì(  figh t( )(O4  Action Character , DE H ero ;ý ͉ ×µ ž³;12¥!, Adven tu re mÎ×Ïñ»1 c(µ12!Q( H ero ¥!ÝEvA¬§*t3×µ [$AvШJA¬,Ñ× in terface ×^âXî%â%&á«)¨(K€ 3Ò%ÓF) F Java *(+, Jâ%#(zj«(L;ÔJAgV×B h(base type)Ÿà çˆ(×¢7 ñ¢JÍP abstract ˆ TBÏc>‡(L%Õ+Ö×â%&12 ×(¥! ž³ ØÍ ó3×Ï ¬Q,3ך¹Lghˆ in terface ˆ abstract Ê in terface ²¬,¡ abstract  (‘Ù ü¬,¡ in terface (‘Ù æòó%B(+,˶ÝEX kÚµŽ&Û(O4 ¡vwV/çˆ in terfaceñ¢J ÄÅ¡NO ¦ÜÝÝ;ºB(› ¡vwV/ ÞPATŽ in terface ómFX‰XO4µ3Ž&Û(´Ž ¡Z;PAð Ž abstract  3š;mî%ðŽñ»  ñíV×(MÝ;º±g3Ìߚ¹FJâ* Can F igh t  Action Character Æm3×3à3¦( void figh t( )µ Ë œmš¹ æ™Açˆ(‡3×µÄÅXáÊ Ž¶3 ׍L //: c08:InterfaceCollision.java interface I1 { void f(); } interface I2 { int f(int i); }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有