Héritage en Java

Introduction à l'héritage

L'héritage est un concept fondamental de la programmation orientée objet (POO) qui permet de transmettre les caractéristiques et comportements d'une classe parente à une classe enfant. Dans notre vie quotidienne, l'héritage se produit lorsque des traits ou des attributs sont transmis d'un parent à un enfant. De la même façon, dans Java, une classe enfant hérite des propriétés et méthodes d'une classe parente.

Il est important de noter que les classes enfants peuvent également disposer de leurs propres propriétés et méthodes, tout en ayant la capacité de redéfinir certaines méthodes de la classe parente. Ce phénomène est connu sous le nom de polymorphisme, un autre élément clé de la POO.

Implémentation de l'héritage

Pour cela, nous utilisons le mot-clé extends. Voici la syntaxe de base pour mettre en œuvre l'héritage :

public class Enfant extends Parent {
    // Corps de la classe
}

Exemple d'héritage

Prenons un exemple simple en définissant une classe Véhicule qui possède des attributs et méthodes correspondant à divers types de véhicules.

public class Vehicle {
    private int numWheels;
    private String engineNum;
    private String maker;
    private String color;

    public int getNumWheels() {
        return numWheels;
    }

    public void setNumWheels(int wheels) {
        this.numWheels = wheels;
    }

    public String getEngineNum() {
        return engineNum;
    }

    public void setEngineNum(String engineNum) {
        this.engineNum = engineNum;
    }
    // Autres getters et setters pour les autres propriétés
}

Avec cette classe Véhicule, nous pouvons définir une classe spécifique comme Voiture, qui va hériter des propriétés de Véhicule sans avoir à les redéfinir complètement. Cela permettra d'accéder à toutes les propriétés de Véhicule dans Voiture.

Classe Voiture

Voici comment nous définissons la classe Voiture qui hérite de Véhicule :

public class Car extends Vehicle {
    // Propriétés et méthodes de la classe Véhicule accessibles ici
    private int airbagCount;

    public int getAirbagCount() {
        return airbagCount;
    }

    public void setAirbagCount(int airbagCount) {
        this.airbagCount = airbagCount;
    }
}

Dans le code ci-dessus, nous pouvons aussi accéder aux propriétés et méthodes de la classe parente :

public static void main(String[] args) {
    Car car = new Car();
    car.setNumWheels(4); // Méthode de la classe parente
    System.out.println(car.getNumWheels()); // Affiche le nombre de roues
    car.setAirbagCount(2); // Méthode de la classe enfant
    System.out.println(car.getAirbagCount()); // Affiche le nombre d'airbags
}

Différents types d'héritage

  1. Héritage simple : Une classe enfant hérite d'une seule classe parente. java public class Parent { // Propriétés et méthodes } public class Child extends Parent { // Propriétés et méthodes de la classe enfant }
  2. Héritage multil niveaux : Une classe enfant hérite d'une classe parente, qui elle-même hérite d'une autre classe. java public class Parent { // Propriétés et méthodes } public class Child extends Parent { // Propriétés et méthodes de la classe enfant } public class GrandChild extends Child { // Propriétés et méthodes accessibles }
  3. Héritage hiérarchique : Différentes classes enfants héritent de la même classe parente. java public class Parent { // Propriétés et méthodes } public class Child extends Parent { // Propriétés et méthodes de la classe enfant } public class Sibling extends Parent { // Propriétés et méthodes de la classe sœur }

Avantages de l'héritage

L'héritage présente plusieurs avantages : - Réutilisabilité du code : Les mêmes propriétés et méthodes peuvent être utilisées dans plusieurs classes à travers l'héritage. - Coûts de maintenance réduits : Si une modification est nécessaire, elle peut être faite en un seul endroit, minimisant ainsi les erreurs potentielles. - Facilité d'ajout de nouvelles fonctionnalités : Lorsqu'une nouvelle fonctionnalité est ajoutée à une classe parente, toutes les classes enfants héritent instantanément de cette fonctionnalité.