当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:17:00  来源:本站整理

Java的"多重承当"[Java编程]

赞助商链接



  本文“Java的"多重承当"[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

接口只是比抽象类“更纯”的一种情势.它的用处并不止那些.由于接口根本没有具体的实施细节——也就是说,没有与存储空间与“接口”关联在一同——所以没有任何办法可以避免多个接口归并到一同.这一点是至关重要的,因为我们常常都需求表达这样一个意思:“x从属于a,也从属于b,也从属于c”.在C++中,将多个类归并到一同的行动称作“多重担当”,并且操作较为不便,因为每个类都大概有一套自己的实施细节.在Java中,我们可采纳一样的行动,但只有此中一个类拥有具体的实施细节.所以在归并多个接口的时刻,C++的问题不会在Java中重演.以下所示:

在一个衍生类中,我们并不一定要拥有一个抽象或具体(没有抽象办法)的底子类.假如确切想从一个非接口担当,那么只能从一个担当.剩余的全部基本元素都必须是“接口”.我们将全部接口名置于implements关键字的背面,并用逗号脱离它们.可按照需求利用多个接口,并且每个接口城市成为一个独立的范例,可对其举行上溯造型.下面这个例子展示了一个“具体”类同几个接口归并的情形,它最毕生成了一个新类:

//: Adventure.java
// Multiple interfaces
import java.util.*;

interface CanFight {
  void fight();
}

interface CanSwim {
  void swim();
}

interface CanFly {
  void fly();
}

class ActionCharacter {
  public void fight() {}
}

class Hero extends ActionCharacter 
    implements CanFight, CanSwim, CanFly {
  public void swim() {}
  public void fly() {}
}

public class Adventure {
  static void t(CanFight x) { x.fight(); }
  static void u(CanSwim x) { x.swim(); }
  static void v(CanFly x) { x.fly(); }
  static void w(ActionCharacter x) { x.fight(); }
  public static void main(String[] args) {
    Hero i = new Hero();
    t(i); // Treat it as a CanFight
    u(i); // Treat it as a CanSwim
    v(i); // Treat it as a CanFly
    w(i); // Treat it as an ActionCharacter
  }
} ///:~
从中可以看到,Hero将具体类ActionCharacter同接口CanFight,CanSwim以及CanFly归并起来.按这种情势归并一个具体类与接口的时刻,具体类必须首先呈现,然后才是接口(不然编译器会报错).
请注意fight()的签名在CanFight接口与ActionCharacter类中是相同的,并且没有在Hero中为fight()供应一个具体的定义.接口的法则是:我们可以从它担当(稍后就会看到),但这样得到的将是另一个接口.假如想成立新范例的一个对象,它就必须是已供应全部定义的一个类.固然Hero没有为fight()明确地供应一个定义,但定义是伴随ActionCharacter来的,所以这个定义会自动供应,我们可以成立Hero的对象.
在类Adventure中,我们可看到共有四个办法,它们将差别的接口和具体类作为自己的自变量利用.成立一个Hero对象后,它可以传送给这些办法中的任何一个.这意味着它们会顺次上溯造型到每一个接口.由于接口是用Java计划的,所以这样做不会有任何问题,并且程序员没必要对此加以任何分外的关注.
注意上述例子已向我们揭露了接口最关键的作用,也是利用接口最重要的一个缘由:能上溯造型至多个底子类.利用接口的第二个缘由与利用抽象底子类的缘由是一样的:避免客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一个问题:到底应当利用一个接口还是一个抽象类呢?若利用接口,我们可以同时得到抽象类以及接口的好处.所以假定想成立的底子类没有任何办法定义大概成员变量,那么无论若何都乐意利用接口,而不要挑选抽象类.事实上,假如事前知道某种东西会成为底子类,那么第一个挑选就是把它变成一个接口.只有在必须利用办法定义大概成员变量的时刻,才应考虑采取抽象类.
  以上是“Java的"多重承当"[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .