Théorie 1.2.5: constructeurs et super
#
-
Un constructeur est une méthode spéciale appelée à la création d’un objet
-
Le mot clé
super
permet d’accéder à la superclasse
Constructeur #
- À la création d’un nouvel objet:
public static void main(String[] args){
Vehicule vehicule = new Vehicule();
}
- Un constructeur est appelé:
public class Vehicule implements Rouleur, Formateur {
private double totalKilometres;
public Vehicule() {
this.totalKilometres = 0.0;
}
- Typiquement, on veut créer un objet en spécifiant certaines valeurs:
public static void main(String[] args){
Vehicule vehicule = new Vehicule(12.0);
}
- Dans ce cas, le constructeur doit avoir un argument:
public Vehicule(double totalKilometres) {
this.totalKilometres = totalKilometres;
}
Constructeur et classe parent #
- Il faut toujours appeler le constructeur de la classe parent avec le mot clé
super
public class Auto extends Vehicule {
public Auto() {
super();
}
public Auto(double totalKilometres) {
super(totalKilometres);
}
}
Pourquoi utiliser le mot clé super
?
#
-
Dans chaque constructeur d’une sous-classe (c’est obligé!)
-
Mais aussi pour appeler explicitement une méthode de la classe parent:
public class Auto extends Vehicule {
public void exemple(){
double litresConsomes = super.litresEssenceConsomes();
System.out.println("Mon auto a consomé " + litresConsomes);
}
}
- En particulier, c’est utile pour modifier le comportement d’une méthode parent:
public class Auto extends Vehicule {
// ...
@Override
public String formater(){
String retour = super.formater();
return "[AUTO] " + retour;
}
}
- C’est-à-dire:
- on redéfini la méthode
formater
qui est implantée dans la classeVehicule
- dans
Auto
, le comportement de cette méthode devient:- on prend la valeur de
formater
queVehicule
aurait retournée - main on ajoute
"[AUTO]"
avant de retourner
- on prend la valeur de
- on redéfini la méthode