众所周知,接口可以扩展Java中的接口。我有一个问题,如果接口B扩展接口A,B不需要实现A中定义的方法。但是在java.util包中,List接口扩展了Collection接口,并且它实现了Collection方法,这些方法也是只需要方法声明。
为什么会这样做呢?还有更好的做法吗?在子接口中实现该方法是否有任何区别?
答案 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%抽象类:所有方法必须是抽象方法。
可能你的混淆来自实现接口的抽象类:这些类不能实现接口的方法(尽管被允许),只有第一个具体类必须。