【问题标题】:Java Documentation: What is meaning of 'methods inherited from interface XJava 文档:从接口 X 继承的方法是什么意思
【发布时间】:2017-08-09 05:02:34
【问题描述】:
【问题讨论】:
标签:
java
inheritance
interface
【解决方案1】:
我猜你指的是生成的 JavaDoc HTML 中的这样的语句:
从接口 java.util.Set 继承的方法 ...
这种意义上的继承意味着所讨论的方法的签名是继承的,但不一定是实现。原因很简单:在 Java 中,您通常不会查看第三方代码的实现,而只会查看带有签名和 JavaDoc 的接口。
因此,基本上,这些方法的签名从接口Set 继承并在HashSet 或AbstractSet 中实现。因此,实际上它正在实现接口Set。
旁注:在 Java 8 中,您可以使用接口实现方法,但这是另一回事。
【解决方案2】:
我认为这与 javadoc 的关系比与语言的关系更大。在Java中,接口中的所有方法都必须实现。所以从语言的角度来看,add 和 addAll 之间没有真正的区别。两者都在Set 中声明; HashSet 是一个具体的类;因此它必须为两者提供一个实现。
真正的区别在于作者是否有任何东西要添加到界面中的 javadoc 中。对于add,需要将javadoc添加到HashSet,因为Set将add定义为可选操作(可以通过抛出异常来实现),因此HashSet实际上需要指定add做一些有用的事情。但是,对于 addAll,无需在 HashSet 中添加任何尚未在 Set 的 javadoc 中的文档。
所以我认为 javadoc 页面有点不准确;它真的应该说“javadoc”是从Set 继承的,而不是方法。 (从技术上讲,这些方法不会被继承,因为如果存在具有相同签名的另一个方法,则不会继承来自接口的抽象方法——请参阅JLS 8.4.8。这同样适用于声明的 所有 方法在界面中,无论 javadoc 是否说它们是“继承的”。)但是,说“从类 java.util.Set 继承的文档”对读者来说可能看起来有点奇怪。因此,如果它充分传达了信息,我可以接受轻微的技术错误。大多数读者不会注意到不准确之处,这并不重要。事实上,在您发布这个问题之前,我并没有注意到 javadoc 中的这个小缺陷——我曾经为不同语言的编译器工作,并花了很多时间阅读语言标准并深入研究术语的定义,以便我可以准确了解标准的要求。