Java 中“接口的超级接口”与“接口的直接超级接口”之间的区别?

问题描述 投票:0回答:1

接口如何覆盖对象类的方法?为什么“Collection”接口重写了 Object 类的 equals(Object o) 方法和 hashCode() 方法?

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Collection.html#equals(java.lang.Object).

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Collection.html#hashCode()

要覆盖某个类的方法,我们需要扩展该类(即继承的概念进入画面),这是否意味着 java 中的接口扩展(即继承)对象类?

我的理解:

正如我们所知,Java 中的接口不会扩展 Object 类,但是对于 Object 类中的每个公共方法,在每个没有直接超级接口的接口中声明了一个隐式抽象和公共方法。这是标准的 Java 语言规范,它是这样说的,

"如果一个接口没有直接的超接口类型,那么该接口隐式声明了一个签名为s、返回类型为r的公共抽象成员方法m,并抛出每个签名为s、返回类型为r、返回类型为r的公共实例方法m对应的子句t throws 子句 t 在 Object 中声明,除非接口明确声明了具有相同签名、相同返回类型和兼容 throws 子句的抽象方法。”

(参考:https://docs.oracle.com/javase/specs/jls/se17/html/jls-9.html

但是“集合”接口有一个超级接口(即可迭代)那么它如何覆盖对象类方法?因为它与上述定义相矛盾。

“direct SuperInterface an Interface”与“SuperInterface of an Interface”之间有什么区别吗?因为上面的定义提到了'direct Super Interface'这个词,而Iterable是Collection的SuperInterface。

(参考:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Collection.html

编辑:

非常感谢!@user16320675。但是它想知道通过接口覆盖(即声明)Object 类方法的目的是什么无论如何实现该接口的类将隐式扩展 Object 类,因此该类可以覆盖所需的 Object 类方法?

java object inheritance collections interface
1个回答
0
投票

“接口的超接口”与“接口的直接超接口”的区别

简而言之:direct superinterface是接口扩展的接口(父接口); superinterfaces 包括直接接口和那个接口的任何超级接口(父母,祖父母,祖父母,...)

术语superinterfacedirect superinterface在Java语言规范9.1.3中定义。超级接口和子接口

如果提供了

extends
子句,...
指定的接口类型是被声明接口的直接超接口类型
...
如果第一个接口由第二个接口的直接超接口类型之一命名,则一个接口是另一个接口的直接超接口。

superinterface关系是直接超接口关系的传递闭包。接口

I
是接口
K
的超接口如果满足以下任一条件:

  • I
    K
    .
  • 的直接超接口
  • 其中
    J
    K
    的直接超级接口,
    I
    J
    的超级接口,递归地应用这个定义。
© www.soinside.com 2019 - 2024. All rights reserved.