Héritage et polymorphisme
15 min · Intermédiaire · 3 octobre 2026
Hériter avec extends
java
public class Animal {
protected String nom;
public Animal(String nom) {
this.nom = nom;
}
public String crier() {
return nom + " fait un bruit.";
}
}
public class Chien extends Animal {
public Chien(String nom) {
super(nom); // appelle le constructeur d'Animal
}
@Override
public String crier() {
return nom + " aboie !";
}
} super(nom) appelle le constructeur de la classe parente Animal pour initialiser nom. @Override signale explicitement que crier() redéfinit la méthode héritée.
Info
protected rend nom accessible depuis les sous-classes (comme Chien), contrairement à private qui le réserverait exclusivement à Animal.
Utiliser l’héritage
java
Chien rex = new Chien("Rex");
System.out.println(rex.crier()); // "Rex aboie !"
Animal generique = new Animal("Créature");
System.out.println(generique.crier()); // "Créature fait un bruit." Le polymorphisme
java
Animal a = new Chien("Rex"); // reference de type Animal, objet reel Chien
System.out.println(a.crier()); // "Rex aboie !" : la version de Chien est utilisee
Animal[] animaux = { new Animal("X"), new Chien("Rex") };
for (Animal animal : animaux) {
System.out.println(animal.crier());
}
// "X fait un bruit."
// "Rex aboie !" Chaque élément du tableau appelle sa propre version de crier(), selon son type réel, même si le tableau est déclaré Animal[].
À toi de jouer
java
public class Forme {
public double aire() {
return 0;
}
}
public class Carre extends Forme {
private double cote;
public Carre(double cote) {
this.cote = cote;
}
@Override
public double aire() {
return cote * cote;
}
}
Forme f = new Carre(5);
System.out.println(f.aire());