constructor_declaration ::= { modifier } identifier "(" [ parameter_list ] ")" statement_block
This rule is called by
new
. Il est chargé
d'initialiser les valeurs du nouvel objet.
Le constructeur doit porter le même nom que la classe et ne retourne
aucun type, pas même void. Il peut également y avoir
surcharge de constructeurs.
class Crayon {
protected int longueur = 100; // en millimetres
protected int diametre = 5; // en millimetres
// cree un crayon standard
public Crayon() {
}
// cree un crayon de longueur l et de diametre d
public Crayon(int l,int d) {
longueur = l;
diametre = d;
}
public int quelleLongueur() {
return longueur;
}
public int quelDiametre() {
return diametre;
}
public void changeLongueur(int nouvelleLongueur) {
longueur = nouvelleLongueur;
}
}
Dans cette exemple, nous déclarons deux constructeurs. Le premier,
Crayon()
initialise les variables en utilisant les
valeurs par défaut. Le deuxième constructeur,
Crayon(int l,int d)
, utilise les valeurs fournies au
constructeur pour initialiser l'objet.
Si l'on crée une classe qui hérite
d'une autre classe, on peut faire appel à l'un des constructeurs
de la super-classe en utilisant le mot clé super
.
Dans l'exemple ci-dessous, le constructeur
CrayonCouleur(int, int, String)
fait appel au
constructeur de Crayon
en appelant super(l,d)
.
class CrayonCouleur extends Crayon {
protected String couleur = "gris";
public CrayonCouleur() {
super();
}
public CrayonCouleur(int l,int d,String c) {
super(l,d); // initialise les variables longueur
// et diametre en utilisant le
// constructeur de la "superclass"
couleur = c;
}
public CrayonCouleur(String c) {
super();
couleur = c;
}
public String quelleCouleur() {
return couleur;
}
public void changeCouleur(String nouvelleCouleur) {
couleur = nouvelleCouleur;
}
}
Notons que l'appel au constructeur super()
doit être
la première instruction du bloc, et qu'il doit même figurer avant
la déclaration de variables.