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

Java接口扩展了Java.util包中的接口,java,interface,Java,Interface,正如我们所知,接口可以扩展Java中的接口。我有一个问题,如果接口B扩展了接口a,那么B不需要实现a中定义的方法。但是在java.util包中,列表接口扩展了集合接口,它实现了集合方法,这些方法也只有方法声明 为什么它会这样做,并且有更好的实践?在子接口中实现方法与否有什么区别吗?接口在Java中是完全抽象的。他们不能有任何实现 重新说明方法与实现方法不同。重新声明一个方法(如果方法签名完全相同)没有任何意义,因为扩展另一个接口的接口的目的是添加一些更具体的方法声明,而不仅仅是重新声明现有的方法

正如我们所知,接口可以扩展Java中的接口。我有一个问题,如果接口B扩展了接口a,那么B不需要实现a中定义的方法。但是在java.util包中,列表接口扩展了集合接口,它实现了集合方法,这些方法也只有方法声明


为什么它会这样做,并且有更好的实践?在子接口中实现方法与否有什么区别吗?

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

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


编辑



正如在和答案中指出的,重新声明的目的是根据子接口重新指定方法。因此,对于访问底层集合的客户机代码,与超级接口中更通用的方法相比,重新声明的方法上会有一个单独的更具体的规范。

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

例如,
Collection.iterator()
由以下内容指定:

返回此集合中元素的迭代器。没有 关于元素返回顺序的保证 (除非此集合是提供 担保)

List.iterator()

按正确的顺序返回此列表中元素的迭代器


接口列表不实现集合的方法,因为接口不能实现方法,它们只是声明方法。接口就像一个100%抽象类:所有方法都必须是抽象方法


您的困惑可能来自于实现接口的抽象类:这些类不能实现接口的方法(尽管允许),只能实现第一个具体类

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

列表界面除了 在上的集合接口中指定的 迭代器的契约,添加,删除, equals和hashCode方法。声明 为方便起见,此处还包括其他继承方法。


列表中正在重新定义集合中的哪个方法?你能提供一些例子吗?
List
中实现了什么方法?@Vikdor:所有这些方法都可能重复,显然Java API的设计者不同意你的第二段。@meriton:你能给我一个提示吗?:)他们确实在
列表中重新声明了
收集的所有方法。如果他们认为这样做没有任何意义,我怀疑他们会这么做……他们只是为了方便才重新申报。它还有助于重新定义该特定方法的javadocs。@meriton:我现在明白了,它有助于从子接口的角度重新规范行为。:)