tipo - tostring java
¿Las interfaces heredan de la clase Object en java? (7)
¿Las interfaces heredan de la clase
Object
en Java?
No, ellos no. Y tampoco existe una interfaz común "raíz" heredada implícitamente por todas las interfaces (como en el caso de las clases). (*)
Si no, ¿cómo podemos llamar al método de la clase de objeto en la instancia de la interfaz?
Una interfaz declaró implícitamente un método para cada método público en Object
. Por lo tanto, el método equals
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 .
9.2 Miembros de la interfaz
[...]
- Si una interfaz no tiene superinterfaces directas, la interfaz declara implícitamente un método miembro público público m con firma s , return tipo r y throws cláusula t correspondiente a cada método de instancia pública m con firma s , return type r y throws cláusula t declarado en
Object
, a menos que la interfaz declare explícitamente un método con la misma firma, el mismo tipo de devolución y una cláusula throws compatible.[...]
Esta publicación ha sido reescrita como un artículo here .
(*) 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 Subtipificación entre clase y tipos de interfaz ) aunque no hereden de Object
.
¿Las interfaces heredan de la clase Object
en Java?
Si no, ¿cómo podemos llamar al método de la clase de objeto en la instancia de la interfaz?
public class Test {
public static void main(String[] args) {
Employee e = null;
e.equals(null);
}
}
interface Employee {
}
" Todos los tipos de referencia heredan de java.lang.Object . Las clases, las enumeraciones, las matrices y las interfaces son todos tipos de referencia " .
Citado de: http://docs.oracle.com/javase/tutorial/reflect/class/index.html Segunda frase para ser claro.
Cualquier clase que implemente cualquier interfaz también se deriva también de Object
por definición.
En realidad, hay un campo de superclase en cada archivo .class
, incluidos los que representan interfaces.
Para una interfaz siempre apunta a java.lang.Object
. Pero eso no se usa para nada.
Otra forma de verlo es:
interface MyInterface {
// ...
}
public myMethod(MyInterface param) {
Object obj = (Object) param;
// ...
}
Aquí el (Object) param
del molde (Object) param
siempre es válido, lo que implica que cada tipo de interfaz es un subtipo de java.lang.Object
.
Eso es porque el employee e = ...
dice que hay una clase que implementa employee
, y se asigna a la variable e
. Cada clase que implementa una interfaz extiende Objeto implícitamente, por lo tanto cuando haces e.equals(null)
, el lenguaje sabe que tienes una clase que es un subtipo de employee
.
La JVM hará una verificación en tiempo de ejecución de su código (es decir, lanzar NullPointerException
).
Object
es un supertipo de cualquier interfaz [1]
Sin embargo, una interfaz no implements
, extends
o "hereda de" Object
.
JLS tiene una cláusula especial para agregar métodos de Object
en 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
Is intreface hereda Clase de objeto, ¿cómo podemos acceder a los métodos de clase de objeto a través de una referencia de tipo de interfaz
No Interface no hereda la clase Object
, pero proporciona acceso a todos los métodos de la clase Object
. Los miembros de una interfaz son:
Those members declared in the interface.
Those members inherited from direct superinterfaces.
If an interface has no direct superinterfaces, then the interface implicitly
declara un método de miembro público abstracto correspondiente a cada método de instancia pública declarado en clase de Object
,.
Es un error en tiempo de compilación si la interfaz declara explícitamente tal método m en el caso en que m se declara como final
en Object
.
Ahora está claro que todas las superinterfaces tienen abstract
método de miembro abstract
correspondiente a cada método de instancia public
declarado en Object
.
fuente: http://ohmjavaclasses.blogspot.com/2011/11/is-intreface-inherits-object-clashow.html