Une interface par défaut étend-elle Object?

Si vous définissez une interface comme ci-dessous

interface I1{ } 

Le dans n’importe quelle section de code, vous pouvez écrire comme

 I1 i1; i1.equals(null); 

Alors, d’où vient la méthode égale, l’interface étend-elle aussi la super classe Object?, Si cela est vrai, comment une interface peut-elle étendre une classe?

Supposons que l’interface étende la super classe Object, alors si vous voyez pourquoi l’interface de collection comme Set définit la méthode equals () et hashCode ()? Toute la classe étend la classe Object, donc si vous définissez une méthode abstraite dans une interface présente dans Object class, alors ceux qui implémentent l’interface n’ont pas besoin d’implémenter ces méthodes. Comme dans le code ci-dessous

 interface I1{ Ssortingng toSsortingng(); } class A implements I1{ } 

Ici, la classe A n’a pas besoin d’implémenter la méthode toSsortingng () telle qu’elle est présente dans la classe Object. Ensuite, quel est l’objective de définir ces méthodes dans l’interface de collection, car elles ne peuvent pas forcer la classe d’implémentation à implémenter ces méthodes.

Ensuite, d’où vient la méthode equals, l’interface étend-elle également la super classe Object?, Si cela est vrai, comment une interface peut étendre une classe?

La spécification de langage Java traite explicitement de cela.

De la section 9.2 :

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

En gros, vous pouvez utiliser hashCode etc., car la manière dont le langage Java est spécifié signifie que toute implémentation concrète de l’interface sera une classe et que cette classe doit finalement être une sous-classe d’ Object . sera certainement présent.

En d’autres termes, l’interface elle-même n’étend pas Object , il est connu que toute implémentation le fera.

Ici, la classe A n’a pas besoin d’implémenter la méthode toSsortingng () telle qu’elle est présente dans la classe Object. Ensuite, quel est l’objective de définir ces méthodes dans l’interface de collection, car elles ne peuvent pas forcer la classe d’implémentation à implémenter ces méthodes.

En général, ceci est simplement fait par souci de clarté, par exemple pour documenter ce que l’on attend d’une implémentation en termes de membres déclarés dans Object .

Chaque classe étend implicitement Object et hérite donc de toutes les méthodes (non privées) de la classe Object.

Chaque instance a une classe et a donc toute la méthode de Object.

Le fait qu’une instance implémente ou non une interface est totalement inutile à ce stade.

Object est une classe et les interfaces ne peuvent pas étendre les classes, donc “non” – l’interface n’hérite de rien de la classe.