Thinking in Java 3 Edition 8:接口与内部类 接口( interface)和内部类( inner class)提供了一种更为复杂的组织和控 制系统中对象的方法。 比方说,C++就没有这种机制,不过聪明的程序员还是能模拟出这种效 果。Java之所以会有这个特性,是因为设计人员认为它非常重要,语言 应该直接用关键词提供支持。 你已经在第7章学过了 abstract关键词,它能让你在类里创建一个或 多个没有定义的方法—你给出了接口,但是留一部分没做定义,这部分 要由它的继承类来定义。而 interface关键词则创建了一种完全抽象 的,根本不提供实现的类。你会看到, interface不仅是一种抽象类的 极端表现形式,它还是一种能让你将一个对象上传到多个基类的手段,因 此它提供了类似C++的“多重继承( multiple inheritance)”的功能 初看起来,内部类像是一种简单的隐藏代码的机制:你只是把一个类放到 另一个类里。但是,你将会看到,内部类可没这么简单—它还知道该怎 样同宿主类( surrounding class)打交道——因此,即使很多人还不熟悉 内部类,你还是能用它写出更为优雅清晰的代码。你得过一段时间才能把 内部类熟练地运用到设计之中。 接口( interface) interface关键词进一步强化了 abstract的概念。你可以把它想像成 纯的” abstract类。它能让开发人员定义类的形式:方法名,参数列 表,返回值的类型,但是却没有方法的正文。 interface也可以包含数 据成员,但是它天生就是 static和 final的。 interface只提供形式, 不谈实现 interface的意思是“所有‘实现’这个接口的类都应该长这个样 子。”因此任何程序,只要用到了这个 interface就都知道它有那些方 法可供调用了,仅此而已。因此, interface会被用作定义类之间的 “协议( protocol)”。(有些面向对象的语言真的用 protoco/关键词来作 这件事 要想创建 interface,只要把 class关键词换成 interface就行了。跟 类一样,你可以在 interface关键词前面加上 public(只有保存在同名 文件里的 interface才可以加),或者把它空着,留给它 package权 限,这样它就只能用于同一个 package了。 要创建一个实现了某个(或者某组) interface的类,就必须使用 implements关键词。它的意思是,“ interface要告诉你‘类长什么 第2页共47页 www.wgqqh.com/shhgs/tij.html email:shhgs@sohu.comThinking in Java 3 rd Edition www.wgqqh.com/shhgs/tij.html email:shhgs@sohu.com 2 ✁ ✂ 47 ✁ 8: (interface)(inner cl ass),3( *¥!(µ 8µ$C+ + m "X^#$(â%&;'(! Ø ÅJava uDEºm ×)*æ+,ª&ÙA¯·% vwÒ-³./ ¡ôõF 7 û0^, abstract -³A;Ç¡FË123×3 V×mO4(µ55¡¬!,63TO4 %7A(ö8QO4à in terface -³912,3c:! (; Xñí(¡º<gin terface X<3:!( =>?í@´A3;Ç¡3×¥!JAgV×B(CDæ òA,E C+ + (ÍVö8(m u ltip l e inh eritance)Ï(F; f<9Q}3GH(IJK("L¡óP3×kg M3×Ë¡º<gÝ ZGH55ANOwÕ ¦PQ(su rrou nd ing cl ass)]RO55æòSçVªXTU ¡;A«!VWXY(K¡^3D4Z;P T[r\g+,u* (interface) in terface -³]3^_`, abstract (Öa¡ÝEPA|} Íb(Ïabstract A;Çìª&O4(@´LµÑcd ?efg(himµ(j
in terface [ÝEklc m&An0 static final(in terface ó@´ Xoñí in terface (¹pÍDmq ñír ×(Ævws צ Ïæòtâ%ó%g, × in terface ÆNOAmY̵ Ýu,<òàôæòin terface ºv1O4u4( Íwx(p rotocol )Ï(m̶y¥!(z( protocol -³Q1 {) %|12 in terfaceó%P class -³| in terface },~ 3¦¡ÝEF in terface -³¶äJ pu blic(ómFÑ
{Ë( in terface ZÝEä )3PA.6¬A package ¦Aó;)3× package , %123×ñí,×(3)in terface (
ç impl emen ts -³A(¹pÍin terface %#¡q sZ