Java API 中“实现”和“所有实现的接口”之间的区别

Mik*_*019 3 java uml interface implements

Java-API 告诉我特定类实现了哪些接口。但有两种不同类型的信息,我不太确定这意味着什么。例如,对于“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> 
Run Code Online (Sandbox Code Playgroud)

并且:

public class TreeSet<E>
extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, Serializable
Run Code Online (Sandbox Code Playgroud)

现在,“实现”下列出的接口比“所有实现的接口”下列出的接口少。这意味着什么?

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

对不起我的英语不好。我希望我能让我的问题被理解。

Era*_*ran 5

implements列出了直接实现的接口,这些接口是在implements子句中显式指定的接口。

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

TreeSet直接实现NavigableSet,但由于NavigableSetextends SortedSet、which extends Set、which extends Collection、which extends Iterable ,所有这些接口都是由 间接实现的TreeSet,这就是为什么它们被列在所有已实现接口的列表中。

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

例如:

Iterable
  ^
  |
Collection
  ^
  |
 Set
  ^
  |
SortedSet
  ^
  |
NavigableSet
  ^
  |
TreeSet
Run Code Online (Sandbox Code Playgroud)