为什么通过List扩展Collection,为什么再次在List接口中声明Collection接口中的方法

时间:2019-01-22 10:23:13

标签: java collections interface java-11

我检查了Java Collection接口和List接口的源代码。 Collection接口中的某些方法,例如int size(),在List接口中被重新声明,尽管没有必要作为List extends the Collection接口。(Java 11)。

1 个答案:

答案 0 :(得分:2)

子接口中的方法可能具有与具有完全相同签名的超级接口方法不同的行为(或至少是更具体的行为)。

因此,例如,对于List界面的用户来说,了解add

非常有用。
  

将指定的元素添加到此列表的末尾

add界面中Collection的一般描述更具体:

  

确保此集合包含指定的元素(可选操作)

自Java 8起,还有另一个原因需要在子接口中重新声明方法,这就是default接口实现。您可以看到Spliterator<E> spliterator()是在ListCollectionIterable中定义的,并且在每个接口中它都有不同的默认实现。

我同意您在size()中重新定义List的示例意义不大,因为Javadoc实际上与size()中的Collection相同。