Pourquoi Java ne fournit pas de constructeur par défaut, si la classe a un constructeur paramétré? Considérez l'exemple suivant
class A {
int a;
public A() {
}
public A(int val) {
a = val;
}
}
4 Réponses :
Java vous donnera un constructeur par défaut si votre classe ne définit aucun. P>
Si vous avez tout fort> constructeur défini, (même un sans aucun argument), le compilateur ne vous donnera pas un autre. P>
Cela fonctionne comme ceci car il a été spécifié de cette façon. Vous pouvez en savoir plus à ce sujet dans le Spécification de la langue p>
OP sait que Java ne fournit pas constructeur par défaut, si la classe a un constructeur paramétré code>. La question est "pourquoi"?
La raison concerne une combinaison de sécurité et d'interface. Le compilateur ne devrait pas vous donner des méthodes que vous ne définissez pas explicitement. La seule exception est un constructeur de commodité No-Arg si vous ne spécifiez aucun constructeur. Si vous spécifiez un constructeur, le compilateur suppose que vous n'en voulez pas d'autres. P>
Parce que cela briserait la conception de la classe si le compilateur ne fournirait automatiquement aucun constructeur argore à chaque classe. Considérez la classe Scanner. Il possède peu de constructeurs, où vous pouvez spécifier de l'endroit où vous souhaitez lire les données. Si le compilateur n'ajoutait pas non plus de constructeur argileur, après avoir invoqué l'une des données de lecture de scanner pour lire des données d'un objet initialisé avec ce constructeur, une exception serait lancée, car la source de données ne serait pas spécifiée. P>
Il y a des situations dans lesquelles il serait indésirable d'avoir un constructeur par défaut. La langue doit fournir un moyen de dire au compilateur de ne pas le générer. L'utilisation d'un indicateur autre que la présence d'un constructeur explicite entraînerait des problèmes tels que la nécessité de spécifier un constructeur chaque fois que la valeur par défaut est désactivée. P>
L'agencement en cours élimine ce problème en veillant à ce qu'il y ait un autre constructeur chaque fois que la valeur par défaut est désactivée. P>
Je ne pense pas que ce soit un duplicata; Il demande pourquoi i> la spécification dit ce qu'il fait.
@OrgeGedog La difficulté Voici que la réponse littérale à la question de l'OP est "Un compilateur ne génère pas de constructeur par défaut lorsque vous définissez explicitement un constructeur car la définition d'un constructeur par défaut est" l'un du compilateur définit lorsque vous ne le faites pas Définissez un autre '" i>. (Leur
public a () {} code> n'est pas un constructeur par défaut.) L'OP était probablement en train de mélanger la terminologie et probablement i> sur des constructeurs sans argument. Peut-être que la question devrait être éditée si nous voulons assumer que l'OP mélangeait la terminologie.