web-dev-qa-db-fra.com

Les interfaces héritent-elles de la classe Object dans java

Les interfaces héritent-elles de la classe Object 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 {
}
144
ponds

Les interfaces héritent-elles de la classe Object en Java?

Non, ils ne le font pas. Et il n'y a pas non plus d'interface commune "racine" implicitement héritée par toutes les interfaces (comme dans le cas des classes).(*)

Si non, alors comment nous pouvons appeler la méthode de la classe d'objet sur une instance d'interface

Une interface a implicitement déclaré une méthode pour chaque méthode publique dans Object. Ainsi, la méthode equals est implicitement déclarée comme membre dans une interface (sauf si elle l'hérite déjà d'une superinterface).

Ceci est expliqué en détail dans le Java Language Specification, § 9.2 Interface Members .

9.2 Membres de l'interface

[...]

  • Si une interface n'a pas de superinterfaces directes, alors l'interface déclare implicitement une méthode membre abstraite publique m avec signature s, renvoie le type r, et renvoie la clause t correspondant à chaque méthode d'instance publique m avec la signature s, retourne le type r, et jette la clause t déclarée dans Object, sauf si une méthode avec la même signature, même retour et une clause throws compatible est explicitement déclarée par l'interface.

[...]


Ce message a été réécrit en tant qu'article ici .


(*) Notez que la notion d'être un sous-type de n'est pas équivalente à 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 classes et d'interfaces ) même s'ils n'héritent pas de Object.

151
aioobe

Il y a en fait un champ de 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:

interface MyInterface {
    // ...
}

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

Voici le casting (Object) param est toujours valide, ce qui implique que chaque type d'interface est un sous-type de Java.lang.Object.

11
finnw

Object est un super-type de n'importe quelle interface [1]

Cependant, une interface ne implements, extends, ou, "hérite de" Object .

JLS a une clause spéciale pour ajouter des méthodes Object 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

9
irreputable

En effet, employee e = ... Indique qu'il existe une classe implémenteemployee et est affectée à la variable e. Chaque classe qui implémente une interface étend Object implicitement, donc quand vous faites e.equals(null), le langage sait que vous avez une classe qui est un sous-type de employee.

La JVM fera la vérification de l'exécution de votre code (c'est-à-dire throw NullPointerException).

4
Buhake Sindi

L'interface hérite-t-elle de la classe Object, comment pouvons-nous accéder aux méthodes de la classe Object via une référence de type d'interface
Aucune interface n'hérite de la classe Object, mais elle fournit l'accessibilité à toutes les méthodes de la classe Object. Les membres d'une interface sont:

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

déclare une méthode membre abstraite publique correspondant à chaque méthode d'instance publique déclarée dans la classe Object.
Il s'agit d'une erreur de compilation si l'interface déclare explicitement une telle méthode m dans le cas où m est déclaré final dans Object.

Il est maintenant clair que toutes les superinterfaces ont une méthode membre abstract correspondant à chaque méthode d'instance public déclarée dans Object.

source: http://ohmjavaclasses.blogspot.com/2011/11/is-intreface-inherits-object-clashow.html

3
Sheo

Toute classe implémentant une interface est également dérivée de Object ainsi par définition.

0
jabal

" Les types de référence héritent tous de Java.lang.Object . Les classes, énumérations, tableaux et interfaces sont tous des références types. "

Cité de: http://docs.Oracle.com/javase/tutorial/reflect/class/index.html Deuxième phrase pour être clair.

0
dalvarezmartinez1