Donc, disons que j'ai une sous-classe qui étend une super-classe. Dans quels scénarios dois-je explicitement taper super()
pour que le constructeur de la superclasse s'exécute?
Je regarde un exemple dans un livre sur les classes abstraites et lorsqu'elles le développent avec une sous-classe non abstraite, le constructeur par défaut de la sous-classe est vide et un commentaire indique que le constructeur par défaut de la super-classe sera appelé. Dans le même temps, j'ai aussi vu des cas où le problème de quelqu'un n'appelait pas explicitement super()
.
La distinction entre appeler le constructeur default/non-default de la superclasse à partir du constructeur default/non-default de la sous-classe?
Vous jamais besoin juste
super();
C'est ce qui sera là si vous ne spécifiez rien d'autre. Vous seulement devez spécifier le constructeur à appeler si:
Vous prétendez que:
En même temps, j'ai aussi vu des cas où le problème de quelqu'un n'appelait pas explicitement super ().
Pourriez-vous donner des exemples? Je ne peux pas imaginer comment c'est possible ...
Si vous n'appelez pas explicitement un super constructeur, l'argument less constructor (super ()) sera appelé. Cela signifie que vous devez appeler vous-même un constructeur spécifique s'il n'y a pas de constructeur accessible sans argument de la super-classe.
Mais assez souvent, vous voulez quand même un constructeur différent même si vous pouviez utiliser le constructeur par défaut - cela dépend de votre code.
Notez également que si aucun constructeur n'est déclaré, le compilateur génère automatiquement un constructeur public par défaut, mais dès que vous écrivez votre propre constructeur, cela ne se produit plus.
La méthode super()
est toujours appelée dans les constructeurs de sous-classes, même si elle n'est pas explicitement écrite dans le code.
La seule fois que vous avez besoin de l'écrire, c'est s'il y a plusieurs méthodes super(...)
dans la super-classe avec différents paramètres d'initialisation.