"implements" 和 "All Implemented Interfaces" 在 Java API 中的区别

Difference between "implements" and "All Implemented Interfaces" in Java API

Java-API 告诉我特定的 class 实现了哪些接口。 但是有两种不同的信息,我不太确定那是什么意思。例如对于 class "TreeSet" : https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/TreeSet.html 有这样的信息:

All Implemented Interfaces:
Serializable, Cloneable, Iterable<E>, Collection<E>, NavigableSet<E>,     Set<E>, SortedSet<E> 

还有:

public class TreeSet<E>
extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, Serializable

现在,"implements" 下列出的接口比 "All Implemented Interfaces" 下少。这是什么意思?

更进一步:假设我想绘制一个 UML 图,它指定了 Treeset 与 Set 和 Collection 之间的关系。我假设 Treeset 实现了 Set 和 Collection(因为 API 是这么说的,但它没有列在 implements 下,这让我有点困惑......?)。但同时Set也是Collection的一个子接口。那么,绘制指示两个接口之间关系的箭头是否足以指示 TreeSet 实现 Set(但没有指向 Collection 的箭头),或者我是否需要绘制一个箭头指示 TreeSet 也实现 Collection?

对不起我的英语。我希望我的问题可以被理解。

"All Implemented Interfaces" 列表告诉您 class 直接实现的接口,以及这些接口派生自的所有接口。因此,例如,NavigableSet 派生自 SetTreeSet 不直接实现 Set,但 Set 是通过实现 NavigableSet 的任何人也实现 Set.

这一事实实现的

implements列出了直接实现的接口,即在implements子句中明确指定的接口。

所有已实现接口的列表可能会更长,因为 class 直接实现的接口可以扩展 class 间接实现的其他接口。

TreeSet 直接实现了 NavigableSet,但是由于 NavigableSet 扩展了 SortedSet,扩展了 Set,扩展了 Collection,扩展了 Collection Iterable ,所有这些接口都是由 TreeSet 间接实现的,这就是为什么它们列在所有已实现接口列表中的原因。

至于 UML 图,我会画一个箭头,指示 "implements" 仅在 class 和它直接实现的接口之间。间接实现的接口将显示在直接实现的接口的层次结构中。

例如:

Iterable
  ^
  |
Collection
  ^
  |
 Set
  ^
  |
SortedSet
  ^
  |
NavigableSet
  ^
  |
TreeSet

"All implemented interfaces" 包括由超类实现或由实现的接口(直接或非直接)扩展的那些。

这是 Eclipse 的类型层次结构给出的视图,它显示了其他接口的添加位置:

"All Implemented Interfaces"列表只是TreeSetclass内部实现的列表接口。 您始终可以通过在 IDE(Eclipse、STS 等)中打开源代码来验证这一点,如果您使用的是 Eclipse IDE,我建议您在 IDE 中打开 TreeSet 界面,并且验证这一点。

public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
{}