如果 AbstractList 类不实现“迭代器<E>”接口,它如何提供“迭代器<E>”接口的实现?

问题描述 投票:0回答:1
我是 Java 集合框架的新手,如果这个问题听起来很傻,请原谅我。

在“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 类不“实现”接口迭代器?

java collections interface iterator implements
1个回答
2
投票
所以一个类需要使用“implements”关键字来实现它,但是这里的“AbstractList”类(抽象)在不使用“implements”关键字的情况下实现它?

AbstractList

不必显式实现
Iterable
,因为它的超类是
AbstractCollection
,它实现了
Collection
接口。 
Collection
 接口扩展了 
Iterable
,因此(传递地)
AbstractList
ArrayList
 都实现了 
Iterable
.

换句话说,如果

,一个类实现了一个接口

    它的任何父类都实现了接口
  • 或其任何实现的接口扩展了相关接口
  • (或者类本身直接实现接口 - 普通情况)
© www.soinside.com 2019 - 2024. All rights reserved.