【问题标题】:How interface could extend java.lang.Object? [duplicate]接口如何扩展 java.lang.Object? [复制]
【发布时间】:2015-07-03 14:14:58
【问题描述】:

我在JLS这一段找到了

如果一个接口没有直接的超接口,则该接口 隐式声明一个带有签名的公共抽象成员方法 m s,返回类型 r,以及每个 public 对应的 throws 子句 t 具有签名 s、返回类型 r 和 throws 子句 t 的实例方法 m 在 Object 中声明,除非方法具有相同的签名,相同 返回类型,并且兼容的 throws 子句由 界面。

这是否意味着接口从 Object API 进行某种继承?

UPD

为什么可以通过接口类型调用Object的方法?

interface I {}

I i = ...

i.toString();

我在这里看到了某种绑定。对我来说,看起来我们将Object 的方法绑定到I 类型。

【问题讨论】:

  • 哪一部分让你认为接口类型和Object类型之间有任何继承关系?
  • @SotiriosDelimanolis the interface implicitly declares... 我们在继承中做了类似的事情,不是吗?
  • 以及声明方法如何创建继承关系?
  • 这是正确的问题。我不知道。它是如何做这种事情的?
  • 问题中的引用回答了 UPD 中的问题。

标签: java core


【解决方案1】:

这只意味着对于任何接口类型的任何变量,您都可以执行Object 的所有方法。这是有道理的,因为任何接口的任何实现都是Object 的子类(直接在间接上),因此它具有Object 的所有方法的实现。

这并不意味着接口“继承”自 Object 类,因为接口只能扩展其他接口。

【讨论】:

  • 如果是这样,那为什么我可以通过接口类型变量调用Object's 方法(见我的更新)?
  • @JohnWinter 答案正是您从 JLS 发布的报价。每个接口要么隐式声明与 Object 的所有方法具有相同签名的方法,要么从其超级接口继承此类方法。
  • 好的,但是为什么不是继承呢?我不明白。
  • @JohnWinter 我可以用A#someMethod() 方法声明一个类A,用同样名为someMethod 的方法声明另一个类B。 A 和 B 之间仍然没有关系。
猜你喜欢
  • 2012-09-01
  • 1970-01-01
  • 2016-02-22
  • 2014-01-19
  • 2022-01-14
  • 2012-07-20
  • 2018-08-22
  • 2015-10-16
  • 1970-01-01
相关资源
最近更新 更多