interface Playable { 
   void play();
}
interface Bounceable { 
   int play();
}
interface Rollable extends Playable, Bounceable { 
        }
       会提示 The return type is incompatible with Playable.play(), Bounceable.play()
       为啥把Bounceable 里面改成void play();  就能编译过去了呢,我觉得也有冲突的啊,如果另外一个类继承了接口Rollable 并且要实现play()函数,它怎么知道该实现哪个函数呢
 

解决方案 »

  1.   


    Rollable接口同时继承了Playable, Bounceable两个接口。实现了Rollable的类必须同时实现Playable, Bounceable定义的方法。然而你定义了一个play()在两个接口中,要想区分名称相同的方法必须通过参数类型或者参数个数和位置,返回值不能决定不同的方法,像你说的一样“我觉得也有冲突的啊”,系统也觉得有冲突。这个要这么干,那个要那么干。系统郁闷了,改听谁的呢?
    所以必须通过参数类型或者参数个数或位置区分不同的方法。返回值是不行的。http://topic.csdn.net/u/20081130/15/2ee11370-774f-4e7f-9700-d22116b2e2dd.html
      

  2.   

    说的很对~~~
    通俗来说就是你有2个手下A和B 你叫他们去拿个东西过来
    没有指定是那个 那他们两个就不知道怎么做了
    (是A做还是B做 还是其他~ 你都觉得有冲突了编译器它又没思维更不知道做什么了)
      

  3.   

    晕死,好像你们没答到点子上啊,我的问题核心就是"为啥把Bounceable 里面改成void play();  就能编译过去了呢"
      

  4.   

    我认为和重载有关,因为写接口时是不可以写重载方法的例public interface Class1 {
    public int play();
    public void play();
    }就是会报错的,
    你把其中一个改为void的时侯系统只认为它继承了一个方法
      

  5.   

    写的有错,不是系统认为它是重载,是因为系统认为那只是一个方法,
    public interface Class1 {
        public int play();
        public void play();
    }
    这样的话是两个同样的方法,因为系统不认反回值的