今天看thinking in java看到一个接口的问题,很是疑惑,发出来讨论一下

kenli 2003-12-24 10:46:54
//: 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 定义了fight,Hero实现CanFight的时候就继承了ActionCharacter 的fight算是实现了CanFight的fight,真是奇怪。是不是只要在类(及其祖先类)定义了某个接口实现的method,就算implement的method么?如果实现的多个接口的Metho名称冲突怎样?是不是实现一个就都算数了。
...全文
18 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
angel126 2003-12-25
学习到了哈~不错!
  • 打赏
  • 举报
回复
kenli 2003-12-25
估计是不是这样,Javac编译的时候就认为只要这个类中有这个method就认为已经实现这个class的接口,动态绑定的时候,也是从列表中找一个同名(包括参数相同)的method来执行。
  • 打赏
  • 举报
回复
dofly 2003-12-25
學習
  • 打赏
  • 举报
回复
xiaoliang0007 2003-12-24
学习
  • 打赏
  • 举报
回复
xiaozuidazhi 2003-12-24
是其父类实现了fight方法,然后它又实现了有该方法的接口,比较好理解的常规顺序是先实现接口,再继承该实现类。

不过你可以这样理解,继承在先,实现在后,如果以高度论层次的话,那么实现接口在上面,继承父类在下面,继承的时候已经有了该方法,那么实现接口的时候就直接和接口同名方法“对接”。
  • 打赏
  • 举报
回复
tiger_wkh52741 2003-12-24
Agree With You!
  • 打赏
  • 举报
回复
hyhu 2003-12-24
还没看得这么细,我觉得应该是!
  • 打赏
  • 举报
回复
yoken 2003-12-24
接着往下看,有有关冲突的内容
  • 打赏
  • 举报
回复
jxhty 2003-12-24
可以这么认为
  • 打赏
  • 举报
回复
killme2008 2003-12-24
听.....
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
社区管理员
  • Java SE
申请成为版主
帖子事件
创建了帖子
2003-12-24 10:46
社区公告
暂无公告