Les interfaces héritent-elles de la Object
classe en Java?
Si non, comment nous pouvons appeler la méthode de la classe d'objet sur l'instance d'interface
public class Test {
public static void main(String[] args) {
Employee e = null;
e.equals(null);
}
}
interface Employee {
}
java
inheritance
interface
étangs
la source
la source
Serializable
est une interface, la plus simple possible; courirjavap
dessus vous dit de quoi il hérite; et cela est dicté par la spécification du langage Java. Si vous pensez que la spécification JVM entre quelque part, veuillez nous éclairer.Réponses:
Non, ils ne le font pas. Et il n'y a pas non plus d'interface "racine" commune héritée implicitement par toutes les interfaces (comme dans le cas des classes) d'ailleurs. (*)
Une interface a déclaré implicitement une méthode pour chaque méthode publique dans
Object
. Ainsi, laequals
méthode est implicitement déclarée en tant que membre dans une interface (sauf si elle hérite déjà d'une super-interface).Ceci est expliqué en détail dans la spécification du langage Java, § 9.2 Membres de l'interface .
Cet article a été réécrit sous forme d'article ici .
(*) Notez que la notion d'être un sous - type de n'est pas équivalent à hérite de : Les interfaces sans super-interface sont en effet des sous-types de
Object
( § 4.10.2. Sous-typage parmi les types de classe et d'interface ) même si elles n'héritent pas deObject
.la source
Object
classe n'avaient pas été déclarées dans l'interface?equals
méthode dans l'Employee
interface.Object
est un supertype de n'importe quelle interface [1]Cependant, une interface ne
implements
,extends
ou, « Hériter de »Object
.JLS a une clause spéciale pour ajouter des
Object
méthodes dans les 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
la source
java.lang.Object
acceptera également une référence de n'importe quel type d'interface. De plus, vous pouvez convertir une interface en unObject
implicitement sans aucune erreur du compilateur.Il y a en fait un champ superclasse dans chaque
.class
fichier, y compris ceux qui représentent des interfaces.Pour une interface, il pointe toujours vers
java.lang.Object
. Mais cela ne sert à rien.Une autre façon de voir les choses est:
Ici, le cast
(Object) param
est toujours valide, ce qui implique que chaque type d'interface est un sous-type dejava.lang.Object
.la source
C'est parce
employee e = ...
que lit qu'il y a une classe qui implémenteemployee
, et est assignée à variablee
. Chaque classe qui implémente une interface étend Object implicitement, par conséquent, lorsque vous le faitese.equals(null)
, le langage sait que vous avez une classe qui est un sous-type deemployee
.La JVM effectuera une vérification à l'exécution de votre code (c'est-à-dire lancer
NullPointerException
).la source
Si l'interface hérite de la classe Object, comment pouvons-nous accéder aux méthodes de la classe objet via une référence de type d'interface?
Aucune interface n'hérite de la
Object
classe, mais elle fournit l'accessibilité à toutes les méthodes de laObject
classe. Les membres d'une interface sont:déclare une méthode membre abstraite publique correspondant à chaque méthode d'instance publique déclarée dans la
Object
classe .Il est une erreur de compilation si l'interface déclare explicitement une telle méthode m dans le cas où m est déclarée
final
enObject
.Il est maintenant clair que toutes les super-interfaces ont une
abstract
méthode membre correspondant à chaquepublic
méthode d'instance déclarée dansObject
.source: http://ohmjavaclasses.blogspot.com/2011/11/is-intreface-inherits-object-clashow.html
la source
Toute classe implémentant une interface en est également dérivée
Object
par définition.la source
" Les types de référence héritent tous de java.lang.Object . Les classes, énumérations, tableaux et interfaces sont tous des types de référence. "
Extrait de: http://docs.oracle.com/javase/tutorial/reflect/class/index.html Deuxième phrase pour être claire.
la source
Classes, enums, and arrays (which all inherit from java.lang.Object) as well as interfaces are all reference types
: il ne dit pas que l'interface hérite de Object. Uniquement les classes, énumérations et tableaux.