Object类的接口访问方法实例怎么样?

interface Intf { } class A implements Intf { } class Test { public static void main(String[] args) { Intf obj = new A(); obj.toString(); } } 

一位朋友给我看了这个代码,我无法向他解释……

我们知道’refer’对象中定义的方法只能在实例上运行。 我们可以看到Intf没有定义任何方法,但是obj(它指的是Intf )能够调用Object.class的toString()方法

我安慰他说一切都是Java中的对象(虽然我们在eclipse IDE中没有针对Intf自动填充选项)

我们可以看到Intf没有定义任何方法

实际上,在Intf有一个隐式声明的toString方法。

每个接口(未显式扩展另一个接口)都为Object每个公共方法提供了一个隐式方法声明。

这在Java语言规范, 第9.2节接口成员中有详细解释。

9.2接口成员

[…]

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

[…]

我不确定你的问题是什么,因为你是对的。

接口只是一个契约,说实现它的类需要指定某些方法。 在这种情况下, Intf接口是一个无操作,因为它对实现者没有额外的要求。

因此,您的示例在function上与…相同

 class A {} 

当您知道所有类都扩展java.lang.Object并inheritance其方法时,您是否会为该类调用obj.toString()会感到惊讶吗?

即使在涉及更多涉及的接口的情况下,它们也只是对类必须实现的内容提出更多要求。 但是,所有类最终都从Objectinheritance,因此在它们上定义了这些方法。

Java中的每个对象都将inheritance自Object,因此无论您创建什么对象,它都将包含toString()

您正在实现一个不定义方法和没有属性的接口。 实际上,这意味着您的类不必定义任何特定的方法/属性(尽管您可以自由定义任何您想要的,但没有合同来定义特定的方法/属性)。

Java中的每个类都inheritance自java.lang.Object,它提供了几个基本方法,包括toString()。 这意味着您的类可以访问所有这些方法。

请参阅: http : //download.oracle.com/javase/6/docs/api/java/lang/Object.html

No Interface不会inheritanceObject类,但它提供了Object类的所有方法的可访问性。 接口的成员是:

那些成员在界面中声明。

这些成员inheritance自直接超级接口。

如果接口没有直接的超接口,则接口隐式声明与Object类中声明的每个公共实例方法对应的公共抽象成员方法。

如果接口在将对象声明为m的情况下显式声明了这样的方法m,那么这是一个编译时错误。

现在很清楚,所有的superinterface都有与在Object中声明的每个公共实例方法相对应的抽象成员方法。
来源: http : //ohmjavaclasses.blogspot.com/2011/11/is-intreface-inherits-object-clashow.html

问题是什么? 你的最后一句话就是答案:Everything在Java中扩展了Object

Chceck也是如此。 一段时间后我问过同样的问题

接口是否inheritance自java中的Object类