接口是否inheritance自java中的Object类

接口inheritance自Java中的Object类吗?

如果没有,那么我们如何能够在接口实例上调用对象类的方法

 public class Test { public static void main(String[] args) { Employee e = null; e.equals(null); } } interface Employee { } 

接口inheritance自Java中的Object类吗?

不,他们不。 而且对于这个问题,没有一个通用的“根”接口被所有接口隐式地inheritance(就像在类中一样)。 (*)

如果没有,那么我们如何能够在接口实例上调用对象类的方法

一个接口隐式地为Object每个公共方法声明一个方法。 因此, equals方法被隐式地声明为接口中的成员(除非它已经从超接口inheritance)。

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

9.2接口成员

[…]

  • 如果一个接口没有直接的超级接口那么接口隐式地声明一个具有签名s的公共抽象成员方法m ,返回types为r ,并且抛出对应于每个具有签名s的公共实例方法m的子句t ,返回types为r ,并且抛出子句tObject声明 ,除非具有相同的签名,相同的返回types和兼容的throws子句的方法由接口显式声明。

[…]


这篇文章在这里被重写为一篇文章。


(*)请注意,作为子types的概念不等于inheritance :没有超类接口的接口确实是Object子types( 第4.10.2节。类和接口types之间的子types ),即使它们不从Objectinheritance。

实际上,每个.class文件中都有一个超类字段,包括那些表示接口的字段。

对于一个接口,它总是指向java.lang.Object 。 但是这不是用于任何事情。

另一种看待它的方法是:

 interface MyInterface { // ... } public myMethod(MyInterface param) { Object obj = (Object) param; // ... } 

这里cast (Object) param总是有效的,这意味着每个接口types都是java.lang.Object的子types。

Object是任何接口的超types[1]

但是,接口不会implementsextends从“inheritance” Object

JLS有一个特殊的子句来将Object方法添加到接口中[2]

[1] http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.10.2

[2] http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.2

这是因为employee e = ...读取有一个实现 employee的类,并被分配给variablese 。 每个实现接口的类都会隐式扩展Object,因此,当您执行e.equals(null) ,语言知道您有一个类是employee的子类。

JVM将为您的代码执行运行时检查(即抛出NullPointerException )。

Interface是否inheritance了Object类,如何通过接口types引用访问对象类的方法
没有接口不inheritanceObject类,但它提供了对Object类的所有方法的可访问性。 界面的成员是:

 Those members declared in the interface. Those members inherited from direct superinterfaces. If an interface has no direct superinterfaces, then the interface implicitly 

声明与在Object类中声明的每个公共实例方法相对应的公共抽象成员方法
如果在m被声明为Object中的final的情况下,接口显式声明了这样的方法m,那么这是一个编译时错误。

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

您正在调用实现接口的Object的equals方法。

任何实现任何接口的类也都是从Object派生的。

引用types全部从java.lang.Objectinheritance,类,枚举,数组和接口都是引用types。

引用自http://docs.oracle.com/javase/tutorial/reflect/class/index.html第二句要清楚。;