Menu
Coddy logo textTech

Héritage de base (extends)

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 20 sur 87.

L'héritage est l'un des piliers fondamentaux de la POO. Il permet à une classe d'acquérir les propriétés et les méthodes d'une autre classe, favorisant la réutilisation du code et établissant une hiérarchie naturelle entre les classes.

En Java, vous créez une relation d'héritage en utilisant le mot-clé extends. La classe qui hérite est appelée la sous-classe (ou classe enfant), et la classe dont on hérite est la super-classe (ou classe parent).

public class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " is eating");
    }
    
    public String getName() {
        return name;
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);  // Appelle le constructeur parent
    }
    
    public void bark() {
        System.out.println(getName() + " says woof!");
    }
}

La classe Dog hérite automatiquement de la méthode eat() et de la méthode getName() de Animal. Elle peut également définir ses propres méthodes comme bark() :

Dog myDog = new Dog("Buddy");
myDog.eat();   // Hérité : "Buddy is eating"
myDog.bark();  // Méthode propre : "Buddy says woof!"

Considérez l'héritage comme une relation de type « est un ». Un Dog est un Animal, il est donc logique que Dog étende Animal. Cette relation vous permet de construire des classes spécialisées qui partagent des fonctionnalités communes tout en ajoutant leurs propres comportements uniques.

challenge icon

Défi

Facile

Construisons un système de véhicule simple qui démontre l'héritage en action. Vous allez créer une classe parente qui contient les propriétés communes des véhicules, et une classe enfant qui l'étend avec un comportement spécialisé.

Vous organiserez votre code sur trois fichiers :

  • Vehicle.java : Créez la classe parente qui représente n'importe quel véhicule. Elle doit avoir :
    • Un champ privé pour la marque du véhicule brand (String)
    • Un constructeur qui accepte le nom de la marque (l'utilisation de super() n'est pas nécessaire ici puisque Vehicle est le parent)
    • Une méthode getBrand() qui retourne la marque
    • Une méthode start() qui affiche : [brand] is starting
  • Motorcycle.java : Créez une sous-classe qui étend Vehicle. Une moto est un véhicule, donc cette relation "est-un" rend l'héritage approprié. Votre Motorcycle doit :
    • Utiliser extends pour hériter de Vehicle
    • Avoir un constructeur qui prend la marque et la transmet au parent en utilisant super(brand)
    • Ajouter sa propre méthode wheelie() qui affiche : [brand] is doing a wheelie!
  • Main.java : Rassemblez le tout en créant un objet Motorcycle et en démontrant à la fois les comportements hérités et uniques. Vous recevrez une entrée : le nom de la marque. Affichez deux lignes en appelant :
    • La méthode héritée start()
    • La propre méthode wheelie() de Motorcycle

Vous recevrez une entrée : le nom de la marque (String) pour votre moto.

Remarquez comment votre Motorcycle a automatiquement accès à start() et getBrand() sans avoir à les réécrire - c'est tout le pouvoir de l'héritage !

Aide-mémoire

Utilisez le mot-clé extends pour créer une relation d'héritage entre les classes :

public class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " is eating");
    }
    
    public String getName() {
        return name;
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);  // Appelle le constructeur parent
    }
    
    public void bark() {
        System.out.println(getName() + " says woof!");
    }
}

La sous-classe (enfant) hérite de toutes les méthodes de la superclasse (parent) et peut ajouter les siennes :

Dog myDog = new Dog("Buddy");
myDog.eat();   // Méthode héritée
myDog.bark();  // Sa propre méthode

Utilisez super() dans le constructeur de la sous-classe pour appeler le constructeur de la classe parente.

L'héritage représente une relation « est un » (is-a) entre les classes.

Essayez vous-même

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String brand = scanner.nextLine();
        
        // TODO: Créer un objet Motorcycle avec la marque brand
        
        // TODO: Appeler la méthode héritée start()
        
        // TODO: Appeler la méthode wheelie()
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet