Une classe abstraite peut-il provoquer un constructeur ?
Dans l’affirmative, comment il peut être utilisé et à quelles fins ?
Une classe abstraite peut-il provoquer un constructeur ?
Dans l’affirmative, comment il peut être utilisé et à quelles fins ?
Réfléchissez à ceci:
abstract class Product {
int multiplyBy;
public Product( int multiplyBy ) {
this.multiplyBy = multiplyBy;
}
public int mutiply(int val) {
return muliplyBy * val;
}
}
class TimesTwo extends Product {
public TimesTwo() {
super(2);
}
}
class TimesWhat extends Product {
public TimesWhat(int what) {
super(what);
}
}
La super-classe de Produit est abstraite et a un constructeur. La classe de béton TimesTwo a un constructeur par défaut qui vient de code en dur la valeur 2. La classe de béton TimesWhat a un constructeur qui permet à l'appelant de spécifier la valeur.
REMARQUE: Comme il n'y a pas de valeur par défaut (ou de non-arg) constructeur dans le parent de la classe abstraite le constructeur utilisé dans les sous-classes doivent être spécifiés.
Résumé constructeurs vont souvent être utilisée pour appliquer des contraintes de classe ou les invariants tels que les champs minimum pour l'installation de la classe.
Vous pourriez définir un constructeur dans une classe abstraite si vous êtes dans l'une de ces situations:
Notez que:
Dans tous les cas, n'oubliez pas que si vous ne définissez pas un constructeur, alors le compilateur va générer automatiquement un pour vous (ce qui est public, n'a pas d'argument, et ne fait rien).
Oui! Les classes abstraites peuvent avoir des constructeurs!
Oui, quand on est de définir une classe à une Classe Abstraite, il ne peut pas être instanciée, mais cela ne signifie pas une classe Abstraite ne peut pas avoir de constructeur. Chaque classe abstraite doit avoir une sous-classe concrète à mettre en œuvre les méthodes abstraites de la classe abstraite.
Lorsque nous créons un objet d'une sous-classe de tous les constructeurs dans l'arbre d'héritage sont invoqués en approche. Même cas s'applique pour les classes abstraites. Si nous ne pouvons pas créer un objet de la classe abstraite, lorsque nous créons un objet d'une classe qui est en béton et sous-classe de la classe abstraite, constructeur de la classe abstraite est automatiquement appelée.Par conséquent, nous pouvons avoir un constructeur dans les classes abstraites.
Remarque : Un non-classe abstraite ne peut pas avoir une des méthodes abstraites, mais une classe abstraite peut avoir une méthode abstraite. La raison est similaire à celle des constructeurs, la différence étant au lieu d'obtenir automatiquement invoqué, nous pouvons faire appel à super(). Aussi il n'y a rien comme abstrait constructeur, car il ne fait aucun sens du tout.
Non seulement il peut, il le fait toujours. Si vous ne spécifiez pas, puis il a un défaut, aucun arg constructeur, comme n'importe quelle autre classe. En fait, TOUTES les classes, y compris imbriquées et anonyme des classes, va avoir un constructeur par défaut si l'on n'est pas spécifié (dans le cas de l'anonymat de classes, il est impossible de spécifier un, de sorte que vous obtenez toujours le constructeur par défaut).
Un bon exemple d'une classe abstraite avoir un constructeur est le Calendrier de la classe. Vous obtenez un Calendrier de l'objet en appelant le Calendrier.getInstance(), mais elle a aussi des constructeurs qui sont protégés. La raison de ses constructeurs sont protégés et ne soient pas privées, est de sorte qu'il peut être étendu par des sous-classes. Parce que les constructeurs sont protégés, seules les classes du même package peut prolonger le Calendrier. Que de 1,7, la sous-classe GregorianCalendar est la seule classe qui peut accéder au Calendrier des constructeurs.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.