Mécanismes d'Héritage et Polymorphisme en Java

Relations Parent-Enfant

Héritage

Java permet à une classe d'acquérir les propriétés d'une autre classe via le mécanisme d'héritage. La classe héritant des propriétés est appelée classe enfant, tandis que la classe héritée est la classe parente.

Mot-clé extends

Le mot-clé extends établit la relation d'héritage :

class Parent {
    // Membres et méthodes
}

class Enfant extends Parent {
    // Implémentation spécifique
}

La classe enfant hérite de tous les membres du parent, y compris les champs private (accessibles uniquement via les méthodes du parent).

Visibilité protected

Le modificateur protected permet aux classes enfants d'accéder directement aux membres, contrairement à private. L'accès par défaut (sans modificateur) autorise l'accès aux classes du même package.

Redéfinition de méthodes

Pour mdoifier le comportement d'une méthode héritée :

class Gestionnaire extends Employe {
    public double calculerSalaire() {
        double salaireBase = super.calculerSalaire();
        return salaireBase + prime;
    }
}

super invoque la méthode parente, tandis que this référence l'instance courante.

Constructeurs

Les constructeurs ne sont pas hérités. Java appelle automatiquement le constructeur parent dans le constructeur enfant :

class Gestionnaire extends Employe {
    Gestionnaire() {
        super(); // Appel implicite au constructeur parent
        // Initialisations supplémentaires
    }
}

Règles d'héritage

  • Une classe parente peut avoir plusieurs enfants
  • Une classe enfant ne peut hériter que d'une seule classe parente
  • Java ne supporte pas l'héritage multiple

Polymorphisme

Une variable parente peut référencer une instance enfant :

Employe e = new Gestionnaire(); // Valide
Gestionnaire g = new Employe(); // Invalide

Liaison dynamique

Java détermine à l'exécution quelle version de méthode invoquer :

Méthode Employe Gestionnaire
getNom() Parent Parent
calculerSalaire() Parent Enfent

Restrictions final

Une classe final ne peut être héritée. Une méthode final ne peut être redéfinie.

Classes abstraites

Déclarées avec abstract, elles contiennent des méthodes sans implémentation :

abstract class Personne {
    public abstract String getDescription();
}

Les classes enfants doivent implémenter les méthodes abstraites. Impossible d'instanceir une classe abstraite.

Classe Object

Toutes les classes héritent implicitement d'Object.

Redéfinition de equals

public boolean equals(Object autre) {
    if (this == autre) return true;
    if (autre == null) return false;
    if (getClass() != autre.getClass()) return false;
    // Comparaison des champs
}

Redéfinition de toString

public String toString() {
    return "Représentation textuelle";
}

Listes génériques

ArrayList permet des collections redimensionnables :

ArrayList<Employe> equipe = new ArrayList<>();
equipe.add(new Employe());
equipe.remove(0);

Étiquettes: Java Héritage polymorphisme ClassesAbstraites Object

Publié le 11 juillet à 21h42