8
votes

Quel est le niveau maximum d'héritage en Java?

Je me demandais s'il y a un nombre de fois fini que je peux hériter d'une classe? Ou quels sont les facteurs qui peuvent influencer cela?


2 commentaires

J'espère que vous n'atteignez jamais une telle limite (si elle existe) :)


Pourquoi y a-t-il une demande de la fermer? N'est-ce pas une vraie question?


5 Réponses :


4
votes

Pour toutes les applications pratiques, les arbres héritables en Java peuvent devenir une taille infinie.


0 commentaires

4
votes

Il n'y a pas de limite spécifique dans la spécification.

Il y a probablement une limite dépendante de la mise en œuvre, si seulement dans celle que vous êtes limitée par la mémoire disponible (les informations de classe doivent être stockées quelque part après tout).

Et si vous atteignez cette limite, votre conception est brisée de toute façon (tout ce qui passe dans les deux chiffres est définitivement une odeur de code).


0 commentaires

1
votes

Si une classe est finale , vous ne pouvez pas l'hériter.

En plus de cela, vous pouvez avoir des arbres infiniment héritage. Vous pouvez également infiniment implémenter de nombreuses classes d'interface aussi.


5 commentaires

La mise en œuvre de nombreuses interfaces permet à de grands arbres d'héritage, cependant, pas pour les profonds.


En fait, non - voir la réponse de @ Pinichi.


@ Joachim Sauer, vrai, je faisais simplement élaborer que vous pouvez tous les deux devenir infiniment profond dans l'héritage et l'infiniment large aussi ....


Encore une fois, non plus vrai. Le même article indique que la limite de largeur d'héritage est (au plus) 65535 - en pratique, cela pourrait être encore moins. Bien sûr, aucun de nous ne sera même proche de ces limites dans les projets réels de la vie - mais toujours, il y a des limites.


@ Péter Török, j'ai lu l'article et vous êtes effectivement correct. "Pratiquement" (entre parenthèses), c'est possible cependant. Je me demande si j'ajoute 65536e classe, le compilateur me bomberait-il?



17
votes

lire Ce (c'est amusant)

The system is out of resources.
Consult the following stack trace for details.
java.lang.StackOverflowError


2 commentaires

+1 Pour des recherches intéressantes, la réponse étant ~ 60 niveaux de profondeur pour la compilation et la course pour ceux qui veulent connaître la réponse avant de cliquer sur le lien


Expérience intéressante, mais @jonathans Réponse est toujours vrai: pour toutes les applications pratiques, il n'y a pas de limite.



1
votes

Il n'y a pas de limite spécifiée. Pour toutes les raisons pratiques, il est infini.


0 commentaires