que - public interface java
¿Una interfaz por defecto extiende el objeto? (2)
Entonces, ¿de dónde proviene el método de iguales, es la interfaz también se extiende la súper clase Object ?, si eso es cierto, ¿cómo puede una interfaz extender una clase?
La especificación del lenguaje Java trata esto explícitamente.
De la sección 9.2 :
Si una interfaz no tiene superinterfaces directas, la interfaz declara implícitamente un método de miembro abstracto público m con la firma s, el tipo de retorno r, y la cláusula tows correspondiente a cada método de instancia pública m con la firma s, el tipo de retorno r, y la cláusula tows t declarado en Objeto, a menos que la interfaz declare explícitamente un método con la misma firma, el mismo tipo de retorno y una cláusula de lanzamientos compatibles.
Básicamente, esto es para que pueda usar equals
, hashCode
, etc. porque la forma en que se especifica el lenguaje Java significa que cualquier implementación concreta de la interfaz será una clase, y esa clase debe ser una subclase de Object
, por lo que los miembros definitivamente estará presente.
Para decirlo de otra manera, si bien la interfaz en sí no extiende Object
, se sabe que cualquier implementación lo hará.
Aquí la clase A no necesita implementar el método toString () ya que está presente en la clase Object. Entonces, ¿cuál es el objetivo de definir esos métodos en la interfaz de colección, ya que no pueden obligar a la clase de implementación a implementar esos métodos?
Por lo general, esto solo se hace para mayor claridad, por ejemplo, para documentar lo que se espera de una implementación en términos de los miembros declarados en Object
.
Si define una interfaz como la siguiente
interface I1{
}
En cualquier sección de código puedes escribir como
I1 i1;
i1.equals(null);
Entonces, ¿de dónde proviene el método de iguales, es la interfaz también se extiende la súper clase Object ?, si eso es cierto, ¿cómo puede una interfaz extender una clase?
Supongamos que la interfaz extiende el Objeto de la super clase, entonces, si ve por qué la interfaz de colección como Establecer define el método equals () y hashCode (). Toda la clase extiende la clase Objeto, por lo tanto, si define cualquier método abstracto en una interfaz que esté presente en la clase Objeto, entonces quienes implementan la interfaz no necesitan implementar esos métodos. Como en el siguiente código
interface I1{
String toString();
}
class A implements I1{
}
Aquí la clase A no necesita implementar el método toString () ya que está presente en la clase Object. Entonces, ¿cuál es el objetivo de definir esos métodos en la interfaz de colección, ya que no pueden obligar a la clase de implementación a implementar esos métodos?
Cada clase amplía implícitamente el Object
y, por lo tanto, hereda todos los métodos (no privados) de la clase Objeto.
Cada instancia tiene una clase y, por lo tanto, tiene todos los métodos de Object.
Si una instancia implementa una interfaz o no es completamente irrelevante para este punto.
El objeto es una clase y las interfaces no pueden extender las clases, por lo que "no": la interfaz no hereda nada de ninguna clase.