Question

Java ne permet pas l'héritage de plusieurs classes (encore permet l'héritage de plusieurs interfaces.), Je sais qu'il est très bien en ligne avec le problème classique du diamant. Mais mes questions est pourquoi java ne permet pas l'héritage multiple comme C ++ quand il n'y a pas d'ambiguïté (et donc aucun risque de problème de diamant) tout en héritant de la classe de base multiple?

Autres conseils

J'ai lu que la plupart des programmeurs ne pas utiliser l'héritage multiple d'une manière appropriée. « Allez-y et hériter d'une classe juste pour réutiliser le code » n'est pas la meilleure pratique en cas d'héritage multiple.

De nombreux programmeurs ne savent pas quand utiliser l'héritage simple dans la plupart des cas. L'héritage multiple doit être utilisé avec prudence et seulement si vous savez ce que vous faites si vous voulez avoir une bonne conception.

Je ne pense pas que l'absence d'héritage multiple en Java (comme dans c ++) va imposer des restrictions dans votre conception / problème mappage de domaine code / application dans les classes.

si le support java héritage multiple, alors il peut effectuer d'autres fonctions de java
considérer super méthode qui est utilisée pour appeler le programme de constructor.if super classe () a plusieurs super classe (à cause de l'héritage multiple) puis compilateur obtenir confus au sujet de quel constructeur super classe doit être appelé et lancer une erreur

Simplicité. Pour citer Tom Sintes ,

  

L'équipe de conception Java Java de faire efforça:

     
      
  • simple, orienté objet, et familier
  •   
  • robuste et sécurisé
  •   
  • Architecture neutre et portable
  •   
  • haute performance
  •   
  • Interprété, fileté et dynamique
  •   
     

Les raisons de l'omission de l'héritage multiple du langage Java   la tige principalement de l'objectif « simple, orienté objet, et familier ». Comme   un langage simple, les créateurs de Java voulait une langue que la plupart   Les développeurs peuvent saisir sans formation préalable. À cette fin, ils   travaillé pour rendre la langue similaire à C ++ possible (familier)   sans retenue complexité inutile de C ++ (simple).

     

Dans l'avis des concepteurs, l'héritage multiple provoque plus de problèmes   et la confusion qu'elle résout. Donc, ils ont coupé l'héritage multiple de   la langue (comme ils ont coupé la surcharge des opérateurs). Les concepteurs   une vaste expérience C ++ leur a enseigné que l'héritage multiple seulement   ne valait pas le mal de tête.

concepteurs de Java ont décidé. L'héritage multiple peut être simulé par l'utilisation d'interfaces.

Une réponse simple est que toutes les classes Java dérivent de java.lang.Object IIRC. Donc, vous le feriez toujours ont un problème de diamant ... :-D

Il est vrai que Java n'a pas utilisé pour soutenir l'héritage multiple de mise en œuvre (juste du type à savoir l'interface). Ce fut une décision de conception.

Cependant, depuis Java 8, il prend en charge l'héritage multiple en utilisant des méthodes par défaut. Voir http://docs.oracle.com/javase/tutorial/java/ Iandi / multipleinheritance.html :

  

L'héritage multiple de la mise en œuvre est la capacité d'hériter   des définitions de méthode à partir de plusieurs classes. Des problèmes se posent avec ce   type d'héritage multiple, tels que les conflits de nom et d'ambiguïté.   ... les méthodes par défaut présentent une forme d'héritage multiple   la mise en œuvre.

Le problème de diamant se pose lorsque plusieurs classes parentes définir leurs propres implémentations de quelque chose et la classe des enfants de ces deux doit faire face à l'ambiguïté dont la mise en œuvre à utiliser. Alors, que si toutes les classes Java dérivent de l'objet, qui est une seule classe parente. « Parent unique, les classes dérivées multiples » ne sont pas la même chose que « plusieurs parents, seule classe dérivée »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top