【问题标题】:Java: Reasoning behind mandatory (implicit) declaration of Object's method in any interface definitionJava:在任何接口定义中强制(隐式)声明对象方法的推理
【发布时间】:2016-09-13 18:20:48
【问题描述】:

在第 9.2 段的 JLS 中它说

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

如果假设遗漏了声明,则会导致编译时错误。但是为什么编译器需要这些声明,当任何类都继承了 Object 的方法时,即关于这些方法,某种行为已经得到保证?在任何接口定义中要求这些声明背后的原因是什么?

【问题讨论】:

标签: java interface


【解决方案1】:

考虑这段代码:

public void printList(List<?> list) {
   System.out.println(list.toString());
}

为此,List 类型必须声明方法 toString()。请记住,List 不是Object 的子类型。

【讨论】:

猜你喜欢
  • 2013-12-01
  • 2021-10-22
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多