cybercursus

Héritage et polymorphisme

15 min · Intermédiaire · 3 octobre 2026

Sommaire
  1. Hériter avec extends
  2. Utiliser l’héritage
  3. Le polymorphisme
  4. À toi de jouer

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());
Que produit ce code à l'exécution ?
À quoi sert l'annotation @Override placée au-dessus d'une méthode qui redéfinit une méthode héritée ?
Qu'est-ce que le polymorphisme illustre quand on écrit `Animal a = new Chien();` (Chien héritant d'Animal) ?

Pour aller plus loin

Commentaires

Recherche