Java文档:从接口Xinheritance的方法的含义是什么

我必须在这里遗漏一些基本的Java术语:

类可以扩展,因此它们的方法可以由它们的子类inheritance

接口可以实现 。 实现类必须实现所有接口的方法 – 接口本身不实现任何东西,只声明。

那么,当我查看HashSet的文档( https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html )时,我看到了一个inheritance自的方法列表接口 java.util.Set?

我想你是从生成的JavaDoc HTML中引用这样的语句:

从接口java.util.Setinheritance的方法…

在这个意义上的inheritance意味着所讨论的方法的签名是inheritance的,但不一定是实现。 原因很简单:在Java中,您通常不会查看第三方代码的实现,而只会查看带有签名和JavaDoc的接口。

因此,基本上,这些方法的签名inheritance自接口Set并在HashSetAbstractSet 。 因此,实际上它正在实现接口Set


旁注 :在Java 8中,您可以使用Interfaces实现方法,但这是一个不同的故事。

我认为这与javadoc有关,而与语言有关。 在Java中,必须实现接口中的所有方法。 因此从语言的角度来看, addaddAll没有真正的区别。 两者都在Set中声明; HashSet是一个具体的类; 因此它必须为两者提供实施。

差异实际上只与作者是否有任何东西要添加到界面中的javadoc有关。 对于add ,有必要将javadoc添加到HashSet ,因为Set定义add作为可选操作(它可以通过抛出exception来实现),因此HashSet需要指定add实际上做了一些有用的事情。 但是,对于addAll ,不需要在HashSet中添加任何尚未在Set的javadoc中的文档。

所以我认为javadoc页面稍微不准确; 它真的应该说“javadoc”是inheritance自Set ,而不是方法。 (从技术上讲,这些方法不是inheritance的,因为如果另一个方法具有相同的签名,则不会inheritance接口中的抽象方法 – 请参阅JLS 8.4.8 。这同样适用于接口中声明的所有方法,无论是不是javadoc说它们是“inheritance的”。)但是,说“从类java.util.Setinheritance的文档”可能对读者来说有点奇怪。 如果它能充分传达信息,那么我在这里可能会有轻微的技术不准确性。 大多数读者都不会注意到这种不准确性,这无关紧要。 事实上,在你发布这个问题之前我没有注意到javadoc中的这个小缺陷 – 而且我是一个曾经在编译器上使用不同语言的人,花了很多时间阅读语言标准并深入研究这些术语的定义使我能够准确找出所需的标准。