Java接口扩展了java.util包中的接口

时间:2012-11-03 02:03:17

标签: java interface

众所周知,接口可以扩展Java中的接口。我有一个问题,如果接口B扩展接口A,B不需要实现A中定义的方法。但是在java.util包中,List接口扩展了Collection接口,并且它实现了Collection方法,这些方法也是只需要方法声明。

为什么会这样做呢?还有更好的做法吗?在子接口中实现该方法是否有任何区别?

4 个答案:

答案 0 :(得分:5)

除了提供/替换方法实现之外,覆盖方法还允许提供更具体的javadoc,并缩小返回类型。

例如,Collection.iterator()由:

指定
  

返回此集合中元素的迭代器。没有    关于元素返回顺序的保证    (除非这个集合是某个提供了一个类的类的实例    保证)。

List.iterator()

指定
  

以适当的顺序返回此列表中元素的迭代器。

答案 1 :(得分:2)

我没有看到java.util.List中的任何实现,只是声明。相反,List的javadocs说,

  

List接口放置了其他规定   在Collection接口中指定的那些   迭代器的合同,添加,删除,   equals和hashCode方法。声明   为方便起见,此处还包括其他继承的方法。

答案 2 :(得分:0)

接口在Java中是完全抽象的。他们不能有任何实施。

重新声明方法与实现方法不同。重新声明一个方法没有任何意义(如果方法签名完全相同),因为扩展另一个接口的接口的目的是添加一些更具体的方法声明,而不是重新声明现有的方法。


修改


正如在@Arham's@meriton's中所指出的,重新声明的目的是根据子接口重新指定方法。因此,对于客户端代码,访问底层集合,重新声明的方法将有一个单独的更具体的规范,而不是超级接口中更一般的规范。

答案 3 :(得分:0)

接口List没有实现Collections的方法,因为只有的接口不能实现方法,它们只是声明它们。接口就像100%抽象类:所有方法必须是抽象方法。

可能你的混淆来自实现接口的抽象类:这些类不能实现接口的方法(尽管被允许),只有第一个具体类必须。