【问题标题】:Difference between "implements" and "All Implemented Interfaces" in Java APIJava API中“实现”和“所有实现的接口”之间的区别
【发布时间】:2019-10-24 20:23:34
【问题描述】:

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 和 Collection (因为 API 是这么说的,但它没有列在实现下,这让我有点困惑......?)。但同时Set也是Collection的一个子接口。那么绘制指示两个接口之间关系的箭头是否足够,而不是一个箭头来指示 TreeSet 实现了 Set(但没有指向 Collection 的箭头),或者我是否需要绘制一个指示 TreeSet 也实现 Collection 的箭头? /p>

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

【问题讨论】:

  • 你不会在 TreeSet 和 Collection 之间画箭头;这是从 Set 是一个集合这一事实推断出来的。

标签: java interface uml implements


【解决方案1】:

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

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

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

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

例如:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-03-23
          • 2014-03-15
          • 1970-01-01
          • 2014-08-01
          • 2010-10-17
          • 2014-05-25
          • 1970-01-01
          • 2016-06-18
          • 1970-01-01
          相关资源
          最近更新 更多