Maison >Java >javaDidacticiel >Java autorise-t-il un véritable héritage multiple ?

Java autorise-t-il un véritable héritage multiple ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-24 22:09:02721parcourir

Does Java Allow True Multiple Inheritance?

Java et l'héritage multiple

Vous avez récemment rencontré une question d'entretien concernant la position de Java sur l'héritage multiple. Même si votre réponse était en grande partie correcte, approfondissons le sujet.

Le scénario que vous avez décrit, dans lequel la classe A étend la classe B et la classe B étend l'objet, ne constitue pas un héritage multiple. Au lieu de cela, il s'agit d'un exemple d'héritage à plusieurs niveaux, où chaque niveau descend du précédent.

L'héritage multiple implique qu'une classe hérite de deux ou plusieurs bases qui ne sont pas liées ou qui ont déjà divergé. En Java, puisque Object est toujours une base ultime, l'héritage multiple signifierait hériter de deux lignes différentes.

En interne, lorsque le compilateur résout un membre sur une instance, il recherche ce membre dans la hiérarchie des types de l'objet. Il vérifie d'abord si le type possède directement le membre, et sinon, il passe aux niveaux hérités.

Bien que Java interdise le véritable héritage multiple, il a évolué avec des interfaces qui prennent en charge les « méthodes par défaut » dans Java 8. Ces méthodes par défaut permettent aux classes « d'hériter » des fonctionnalités des interfaces, fournissant un niveau d'indirection qui ressemble à un héritage multiple.

Les méthodes par défaut offrent plusieurs avantages :

  • Elles facilitent l'ajout de nouvelles fonctionnalités à interfaces existantes sans rompre les implémentations existantes.
  • Ils permettent aux interfaces de fournir des implémentations par défaut pour les comportements de base que les classes peuvent remplacer ou implémenter selon les besoins.
  • Ils permettent à une classe d'avoir plusieurs relations "est un" à partir d'arbres de types sans rapport.

Bien que les méthodes par défaut de Java 8 fournissent une forme d'héritage multiple dans la pratique, elles ne résolvent pas les complexités inhérentes au véritable héritage multiple, telles que la sélection ambiguë de superclasse, l'ordre d'invocation du constructeur, et l'héritage de méthode en double.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn