Quand avez-vous besoin d'appeler explicitement un constructeur de la superclasse?
Donc dire que j'ai une sous-classe qui étend la classe mère. Dans quels cas ai-je besoin de le taper explicitement super()
pour obtenir le constructeur de la superclasse de courir?
Je suis à la recherche d'un exemple dans un livre sur les classes abstraites et quand ils l'étendre avec un non-abstraite sous-classe, la sous-classe du constructeur par défaut est vide et il y a un commentaire qui dit que la super-classe par défaut du constructeur sera appelé. En même temps, j'ai aussi vu des cas ici où le problème de quelqu'un n'était pas explicitement appel super()
.
Est la distinction de l'appel de la super-classe par défaut/non-constructeur par défaut de la sous-classe par défaut/non-constructeur par défaut?
- Est-ce moi ou ne satisfait à aucune des réponses répondre à la question "pourquoi avez-vous besoin d'appeler une super-classe' constructeur dans une sous-classe"
Vous devez vous connecter pour publier un commentaire.
Vous jamais avez juste besoin de
C'est ce qui va être là si vous ne spécifiez rien d'autre. Vous seulement besoin de spécifier le constructeur à appeler si:
Vous prétendez que:
Pourriez-vous nous donner des exemples? Je ne peux pas imaginer comment c'est possible...
super()
ne fonctionne pas non plus. L'appel d'une superconstructor avec un non-argument vide de la liste va fonctionner, mais seulement à l'aide desuper()
ne serait pas.super()
s dans le code que j'ai de travailler avec. Je fais presque cliniquement supprimer à chaque fois que je les vois. Cependant, je ne peux m'empêcher de me demander si il ya une raison pourquoi ils sont là. Seriez-vous capable de penser à un cas où vous voulez vraiment ces pas args constructeurs?Si vous n'avez pas appeler explicitement un super constructeur de l'argument de moins de constructeur (super () sera appelée. Cela signifie que vous devez appeler un constructeur vous-même si il n'y a pas joignable argument-moins, le constructeur de la super classe.
Mais, assez souvent, vous voulez un constructeur différent de toute façon, même si vous pouvez utiliser le constructeur par défaut - dépend de votre code.
Également noter que si aucun constructeur est déclaré le compilateur génère un public constructeur par défaut automatiquement, mais dès que vous écrivez votre propre constructeur cela ne se reproduira plus.
La
super()
méthode est toujours appelé dans les constructeurs de sous-classes, même si elle n'est pas explicitement écrit dans le code.Le seul moment où vous devez l'écrire, c'est que si il y a plusieurs
super(...)
méthodes de la super-classe avec différents paramètres d'initialisation.