java集合接口中的继承

时间:2012-07-16 13:36:51

标签: java collections interface

Java集合接口中存在一些继承关系。例如,Collection<T>接口将扩展Iterable<T>。 我检查了JDK中的源代码,基类中定义的一些方法在子类中多次重复。例如:    Interable<T>接口定义了一个方法Iterator<E> iterator();但是在接口Collection<E>List<T>中,也包含相同的方法。根据我的理解,由于继承用于减少重复,为什么我们应该在子类中定义相同的方法?

4 个答案:

答案 0 :(得分:5)

java.util.List

“List接口在迭代器,add,remove,equals和hashCode方法的合同上放置了除Collection接口中指定的规则之外的其他规定。为方便起见,此处还包括其他继承方法的声明。” / p>

答案 1 :(得分:1)

Collection在版本1.2中出现,但是Iterable在版本1.5中出现以允许简洁的for循环,所以我认为这是保持Collection接口的情况发行版之间的Javadocs相同。但是你是对的,没有理由你不能从iterator()删除Collection方法,一切都会编译。

答案 2 :(得分:1)

Collection界面扩展 Iterable。抽象超类实现了几个类共有的方法,对于列表,它是AbstractList,每个具体类(比如ArrayListLinkedList)提供具体的实现细节。 / p>

事实上,正如您所猜测的那样,继承用于减少代码重复。但正因为如此,所有子类都将包含在超类中定义的相同操作,几个类共有的实现细节在抽象类级别的类层次结构中只出现一次,并且它们不会再次“定义”。子类 - 仅在具体子类中重新定义更改的部分。

答案 3 :(得分:0)

后来Iterable引入了since 1.5界面。因此,在此版本之前,只有java.util.Collection个子类用于实现iterator()

后来iterator()通过引入Iterable接口而成为标准,这样任何可以迭代的类都可以实现此接口。

在引入Iterable接口之后,还Collection接口扩展Iterable接口,使Collection接口也实现了标准接口。

对于Ex,

  • java.sql.SQLException也实现了Iterable