¿Las interfaces heredan de la Object
clase en Java?
Si no, cómo podemos llamar al método de clase de objeto en la instancia de interfaz
public class Test {
public static void main(String[] args) {
Employee e = null;
e.equals(null);
}
}
interface Employee {
}
java
inheritance
interface
estanques
fuente
fuente
Serializable
es una interfaz, la más simple posible; ejecutarlojavap
te dice de qué hereda; y eso lo dicta la especificación del lenguaje Java. Si cree que la especificación JVM entra en algún lugar, por favor, avísenos.Respuestas:
No, ellos no. Y tampoco hay una interfaz común "raíz" heredada implícitamente por todas las interfaces (como en el caso de las clases). (*)
Una interfaz declaró implícitamente un método para cada método público en
Object
. Por lo tanto, elequals
método se declara implícitamente como miembro en una interfaz (a menos que ya lo herede de una superinterfaz).Esto se explica en detalle en la Especificación del lenguaje Java, § 9.2 Miembros de la interfaz .
Esta publicación ha sido reescrita como un artículo aquí .
(*) Tenga en cuenta que la noción de ser un subtipo de no es equivalente a heredar de : Las interfaces sin superinterfaz son, de hecho, subtipos de
Object
( § 4.10.2. Subtipo entre clases y tipos de interfaz ) aunque no hereden deObject
.fuente
Object
clase no se hubieran declarado en la interfaz?equals
método en laEmployee
interfaz.Object
es un supertipo de cualquier interfaz [1]Sin embargo, una interfaz no lo hace
implements
,extends
o, "Heredar del"Object
.JLS tiene una cláusula especial para agregar
Object
métodos a las interfaces [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
fuente
java.lang.Object
también aceptará una referencia de cualquier tipo de interfaz. Además, puede emitir una interfazObject
implícitamente sin ningún error del compilador.En realidad, hay un campo de superclase en cada
.class
archivo, incluidos los que representan interfaces.Para una interfaz a la que siempre apunta
java.lang.Object
. Pero eso no se usa para nada.Otra forma de verlo es:
Aquí el reparto
(Object) param
siempre es válido, lo que implica que cada tipo de interfaz es un subtipo dejava.lang.Object
.fuente
Eso es porque
employee e = ...
lee que hay una clase que implementaemployee
, y se asigna a la variablee
. Cada clase que implementa una interfaz extiende Object implícitamente, por lo tanto, cuando lo hacese.equals(null)
, el lenguaje sabe que tienes una clase que es un subtipo deemployee
.La JVM hará una comprobación de tiempo de ejecución para su código (es decir, throw
NullPointerException
).fuente
Es la interfaz hereda la clase Object, ¿cómo podemos acceder a los métodos de la clase de objeto a través de una referencia de tipo de interfaz?
No Interface no hereda la
Object
clase, pero proporciona accesibilidad a todos los métodos de laObject
clase. Los miembros de una interfaz son:declara un método de miembro abstracto público correspondiente a cada método de instancia pública declarado en
Object
clase .Es un error en tiempo de compilación si la interfaz declara explícitamente tal método m en el caso en que se declare que m está
final
enObject
.Ahora está claro que todas las superinterfaces tienen un
abstract
método miembro correspondiente a cadapublic
método de instancia declarado enObject
.fuente: http://ohmjavaclasses.blogspot.com/2011/11/is-intreface-inherits-object-clashow.html
fuente
Cualquier clase que implemente cualquier interfaz también se deriva
Object
también por definición.fuente
" Todos los tipos de referencia heredan de java.lang.Object . Las clases, enumeraciones, matrices e interfaces son todos tipos de referencia " .
Citado de: http://docs.oracle.com/javase/tutorial/reflect/class/index.html Segunda oración para ser clara.
fuente
Classes, enums, and arrays (which all inherit from java.lang.Object) as well as interfaces are all reference types
: no dice que la interfaz hereda de Object. Solo clases, enumeraciones y matrices.