为什么接口引用显示toString(),hashCode()和其他Object的方法

时间:2014-12-12 09:18:38

标签: java

如果接口没有扩展Object类,那么接口引用为什么显示toString(),hashCode()和其他Object的方法。

3 个答案:

答案 0 :(得分:5)

因为这就是语言的设计方式。任何实现接口的类肯定会有Object作为最终祖先,因此在执行时,这些方法肯定是可用的。

这在JLS 9.2中指定:

  

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

答案 1 :(得分:2)

接口的任何实现都必须扩展Object。例如:

SomeInterface foo = new ConcreteImplementation();

这里,ConcreteImplementation必须扩展Object,因为它是所有Java对象的最终祖先。因此,您可以通过Object变量访问与foo类相关联的所有公共方法。

答案 2 :(得分:2)

在Java中,所有都是Object的子类,即使它没有明确声明是这样的。所以你声明你的接口,然后任何类实现你的接口必须是Object的子类,因为一切都是。

因为它是Object的子类,所以它会引入Object的所有可见方法,例如.toString()