百度过这个问题,也在csdn中看到过相同的提问,但所有解释感觉还是没法说服我。
我看过以下两种写法:
1.interface A 继承interface B
2.interface A的重新声明interface B的方法
这两种写法的意义何在?相同的需求,直接让实现A的实体类同时实现没有实现B接口的A和接口B不就行了么?
举例来说,我看到java源码中Collection接口实现了Iterable接口,然后重新声明了iterator方法。
为什么不直接让List同时实现Collection和Iterable接口?

解决方案 »

  1.   

    Interface就是用户和实现者之间的一个合同,
    比如甲承诺实现interface A里面定义的所有公共接口,
    乙承诺实现interfaceB 里面定义的所有公共接口,
    丙承诺用interfaceC 实现interfaceA 和 interfaceB 里面所有的公共接口,也就是interface C implements InterfaceA, InterfaceB所以甲的用户只关心interfaceA,
    乙的用户只关心interfaceB,
    丙的用户则需要关心 interfaceA, interfaceB 和 interfaceC
      

  2.   


    你有没有留意这两个iterator() 接口的注释是不同的?Iterable
    Collection
      

  3.   

    interfaceC 不是已经实现了interfaceA 和 interfaceB吗?为什么丙还要关心 interfaceA, interfaceB?
    为什么不让丙直接实现A,B,C,为什么还需要C实现A和B?
      

  4.   


    你有没有留意这两个iterator() 接口的注释是不同的?Iterable
    Collection

    有啥具体的不同还请解释下,如果Collection不重新声明iterator()会有什么问题吗?