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

时间:2019-06-10 12:20:56

标签: java interface uml 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> 

还有:

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

现在,“实现”下列出的接口要少于“所有实现的接口”下的接口。是什么意思?

此外:假设我想绘制一个UML图,它指定了Treeset与Set和Collection之间的关系。我假设Treeset实现了Set and Collection(因为API如此说,但是它没有在工具下面列出,这让我有些困惑...?)。但同时Set也是Collection的子接口。因此,绘制一个箭头指示两个接口之间的关系就足够了,而绘制一个箭头指示TreeSet实现Set(但没有指向Collection的箭头)就足够了吗?还是我需要绘制一个箭头指示TreeSet也实现Collection? / p>

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

4 个答案:

答案 0 :(得分:4)

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

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

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

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

例如:

TreeSet

答案 1 :(得分:1)

“所有已实现的接口”列表告诉您该类直接实现的接口,以及从这些接口派生的所有接口。因此,例如,NavigableSet是从Set派生的。 TreeSet不能直接实现Set,而是可以通过以下事实实现Set:实施NavigableSet的任何人也可以实现Set

答案 2 :(得分:1)

“所有已实现的接口”包括由超类实现或由已实现的接口扩展(直接或不直接)的接口。

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

enter image description here

答案 3 :(得分:0)

“所有已实现的接口”列表不过是TreeSet类在内部实现的列表接口。 您始终可以通过在IDE中打开源代码(Eclipse,STS等)来进行验证,如果您使用的是Eclipse IDE,建议您在IDE中打开TreeSet接口并进行验证。

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