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>
对不起,我的英语。我希望我的问题可以理解。
答案 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)
答案 3 :(得分:0)
“所有已实现的接口”列表不过是TreeSet类在内部实现的列表接口。 您始终可以通过在IDE中打开源代码(Eclipse,STS等)来进行验证,如果您使用的是Eclipse IDE,建议您在IDE中打开TreeSet接口并进行验证。
public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
{}