在“Iterable”接口中指定了一种方法“iterator()”,它在 E 类型的元素上返回一个“Iterator”,现在 AbstractList(抽象类)提供了该方法的实现并返回一个“Iterator”,所以我的问题是如何它可以在不实现接口“迭代器”的情况下返回一个“迭代器”吗?
参考资料:
数组列表:
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ArrayList.html#iterator()
摘要列表:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/AbstractList.html#iterator()
可迭代:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html#iterator()
迭代器:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html
我的理解:我们知道功能接口可以在不使用“implements”关键字的情况下实现,即通过匿名类和 lambda 表达式的方式,但是“迭代器”接口不是功能接口,因此类需要使用“implements”关键字来实现它但是这里的“AbstractList”类(抽象)在不使用“implements”关键字的情况下实现它?
请注意,我说的是“Iterator”接口而不是“Iterable”接口,在“Iterable”接口中有一种方法“iterator()” 其声明如下所示 - “Iterator iterator() ”并且此方法由 AbstractList 类实现,因为它提供了“iterator()”方法的实现,这意味着它必须实现接口“Iterator”,因为方法的返回类型是“迭代器”但 AbstractList 类不“实现”接口迭代器?
所以一个类需要使用“implements”关键字来实现它,但是这里的“AbstractList”类(抽象)在不使用“implements”关键字的情况下实现它?
AbstractList
不必显式实现
Iterable
,因为它的超类是
AbstractCollection
,它实现了
Collection
接口。
Collection
接口扩展了
Iterable
,因此(传递地)
AbstractList
和
ArrayList
都实现了
Iterable
.换句话说,如果
,一个类实现了一个接口