interface Aable{
   public void doSomething();
}
interface Bable{
   public void doSomething();
}interface ABable extends Aable,Bable{
}
大家讨论一下,如果一个类implements ABable这个接口...
会遇到什么奇怪的事情..还有一种状况是一个类继承一个抽象类和实现一个接口,也存在同名的方法..这个问题在实际开发中估计不常见,纯粹是出于爱好才讨论的..
有大牛出来说说原理吗?

解决方案 »

  1.   

    Java中非抽象子类必须要实现父类和接口中的抽象方法,所以我们不妨先假设一下,那么就有两种可能:
    (1)假设方法是实现的抽象类的,那么接口中的抽象方法就没有实现,此时编译器会报错。
    (2)假设方法是实现的接口中的方法,那么抽象类中的抽象方法没有实现,编译器同样会报错。
    但是在编译的过程中,并没有报错,所以排除上面的两种情况,得出一个结论,方法既是父类的,也是接口的。
      

  2.   

    “大家讨论一下,如果一个类implements ABable这个接口...
    会遇到什么奇怪的事情..”这个 可以这样吧 :interface Aable{
       public void doSomething();
    }
    interface Bable{
       public void doSomething();
    }实现类:   class AB implements Aable{
       
       Bable getBable(){
         
       return new Bable();    }}“有一种状况是一个类继承一个抽象类和实现一个接口,也存在同名的方法..”interface Aable{
       public void doSomething();
    }
    abstract class Bable{
       public void doSomething();
    }public class Cable implements Aable{ public void doSomething() {
          System.out.println("aaaaaaaaaa");
    }
     Bable getBable(){
     return  new Bable(){
     public void doSomething() {
     System.out.println("bbbbb");
    }
     };
     }
    }
    这个肯定没问题 
      

  3.   


    我说这个很奇怪而已..没说这样编译有问题我自己的测试结果是:
         如果有两个同名的方法,只需要实现这个方法.
         不管是用哪个接口的引用,都可以使用这个方法.
         这个play()实现了,用Aable或Bable的引用都可以使用这个方法