第198页java中的多重继承//: co8:Afdeventure.java
//Multiple interfaces.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{
  public static void t(CanFight x){x.fight();}//像这样的定义有什么意义和作用?x又是什
                                              //么,怎么没有定义?x和h有什么关系?
  public static void u(CanSwim x){x.swim();}
  public static void v(CanFly x){x.fly()};
  public static void w(ActionCharacter x){x.fight()};
   Hero h = new Hero();
   t(h); //Treat it as a CanFight
   u(h); //Treat it as a CanSwim
   v(h); //Treat it as a CanFly
   w(h); //Treat it as an ActionCaracter
  } 
}///-谢谢大家点拨了 :)  !!

解决方案 »

  1.   


    public static void t(CanFight x){x.fight();} //CanFight是接口,怎么可以来实例
    //化一个对象呢?里边提到了“向上转型”这个概念。
      

  2.   

    class ActionCharacter{
      public void fight(){}  //这是什么?后边怎么会有{}??
    }
    这是fight()方法,只不过方法中没有任何语句,因此只写了{}public static void t(CanFight x){x.fight();}//像这样的定义有什么意义和作用?x又是什
                                                  //么,怎么没有定义?x和h有什么关系?
    向上转型,书上有
      

  3.   

    public void fight() { } //这是一个具像方法,只不过这个方法不做任何事情。作者在这里要演示的是,Hero类虽然同时实现了三个接口CanFight, CanSwim, CanFly,但因为它又继承自ActionCharacter,所以它无需实现CanFight接口中的fight()方法,因为它的父类ActionCharacter已经给它实现掉了。接下来就是创建一个Hero对象,并分别将它向上转型为CanFight, CanSwim, CanFly和ActionCharacter。其中,x是形式参数,h是传入的实际参数。这个例子没有什么输出结果,它能成功编译,就已经说明问题了。从楼主的疑问中看,楼主接触这个例子似乎早了点,甚至这本书都不一定适合你,建议你找一本Java入门级的读物看看先。
      

  4.   

    我也觉得有点难哎!!定义一个不做任何事情的方法:public void fight(){} 与public void fight()一样吗?也就是说定义一个不做任何事情的方法,后边的{}可以省略吗?-_-
      

  5.   

    public void fight() {}

    public void fight();两者完全不一样。前者就是一个普通的方法,只是方法体中没有语句。而后者(注意结尾处的分号不能省略)只能出现在接口中,用来“声明”一个方法,但并不给出具体实现,即抽象方法。你可以在前面加上abstract关键字,但不加它也是抽象的。如果要在abstract class使用抽象方法,则必须加上abstract关键字。一个非抽象类中则不能有抽象方法。
      

  6.   

    接口可以创建实例?
    public static void u(CanSwim x){x.swim();}
    public static void v(CanFly x){x.fly()};