4. Définition du polymorphisme¶
Le polymorphisme est un concept fondamental en programmation orientée objet qui permet à des objets de différentes classes d’être traités comme des objets d’une classe commune.
Définition formelle¶
Le polymorphisme se manifeste sous deux formes principales :
Polymorphisme ad hoc (surcharge)
- Permet à plusieurs méthodes d’avoir le même nom mais des paramètres différents
- Résolu à la compilation
Polymorphisme par sous-typage (héritage)
- Permet à une classe enfant de redéfinir le comportement d’une méthode héritée
- Résolu à l’exécution (liaison dynamique)
Exemple avec des Véhicules¶
Classe de base¶
public class Vehicule {
private String marque;
private String modele;
public Vehicule(String marque, String modele) {
this.marque = marque;
this.modele = modele;
}
public void demarrer() {
System.out.println("Le véhicule démarre");
}
public String getDescription() {
return marque + " " + modele;
}
}
Première sous-classe¶
public class Voiture extends Vehicule {
private int nombrePortes;
public Voiture(String marque, String modele, int nombrePortes) {
super(marque, modele);
this.nombrePortes = nombrePortes;
}
@Override
public void demarrer() {
System.out.println("La voiture démarre en tournant la clé");
}
@Override
public String getDescription() {
return super.getDescription() + " (" + nombrePortes + " portes)";
}
}
Deuxième sous-classe¶
public class Moto extends Vehicule {
private int cylindree;
public Moto(String marque, String modele, int cylindree) {
super(marque, modele);
this.cylindree = cylindree;
}
@Override
public void demarrer() {
System.out.println("La moto démarre avec le kick");
}
@Override
public String getDescription() {
return super.getDescription() + " (" + cylindree + "cc)";
}
}
Avantages du polymorphisme¶
- Extensibilité: Ajout facile de nouvelles sous-classes sans modifier le code existant
- Réutilisabilité: Le même code peut traiter différents types d’objets
- Maintenance: Modification du comportement spécifique sans affecter le code client
Démonstration du polymorphisme¶
public class DemoPolymorphisme {
public static void main(String[] args) {
// Tableau polymorphique
Vehicule[] vehicules = new Vehicule[3];
vehicules[0] = new Vehicule("Generic", "Transport");
vehicules[1] = new Voiture("Toyota", "Corolla", 4);
vehicules[2] = new Moto("Honda", "CBR", 600);
// Utilisation polymorphique
for (Vehicule v : vehicules) {
System.out.println("Description: " + v.getDescription());
v.demarrer();
System.out.println("---");
}
}
}
Exemple d’utilisation pratique¶
public class GarageAuto {
public static void demarrerTousLesVehicules(Vehicule[] vehicules) {
for (Vehicule v : vehicules) {
System.out.println("Démarrage de: " + v.getDescription());
v.demarrer();
}
}
}
Cette implémentation illustre comment le polymorphisme permet d’écrire du code générique qui fonctionne avec n’importe
quelle sous-classe de Vehicule. La méthode demarrerTousLesVehicules peut traiter n’importe quel type de véhicule
sans avoir besoin de connaître sa classe spécifique.
Utilisation de l’IA
Page rédigée en partie avec l’aide d’un assistant IA. L’IA a été utilisée pour générer des explications, des exemples et/ou des suggestions de structure. Toutes les informations ont été vérifiées, éditées et complétées par l’auteur.