Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Polymorphisme en Java : Guide Complet avec Exemples Pratiques

Qu'est-ce que le Polymorphisme en Java ?

Le polymorphisme est un concept central de la programmation orientée objet (POO) en Java. Il survient lorsque des classes sont liées par l'héritage, permettant à une seule interface de représenter différentes formes sous-jacentes. Le résultat est qu'un appel de méthode peut invoquer différentes implémentations selon le type réel de l'objet à l'exécution.

Pensez à un smartphone qui peut communiquer par appel vocal, texte, image ou email. L'objectif – communiquer – est le même, mais chaque mode se comporte différemment. C'est le polymorphisme dans la vie quotidienne.

Ce que Vous Allez Apprendre

Polymorphisme Java en POO : Un Exemple

Considérez une classe de base Compte qui offre depot() et retrait(). Deux sous-classes, CompteEpargne et CompteCourant, héritent de ces méthodes inchangées car les opérations sont identiques.

Polymorphisme en Java : Guide Complet avec Exemples Pratiques

S'Adapter aux Exigences Changeantes

Lorsqu'une nouvelle fonctionnalité – comme une facilité de découvert – est requise, une sous-classe ComptePrivilégié peut redéfinir retrait() pour fournir la nouvelle logique sans toucher aux sous-classes existantes. Cela démontre l'avantage de maintenabilité du polymorphisme.

Polymorphisme en Java : Guide Complet avec Exemples Pratiques

Redéfinition de Méthode en Java

La redéfinition (overriding) se produit lorsqu'une sous-classe fournit sa propre implémentation d'une méthode déjà définie dans sa super-classe. La signature de la méthode (nom, paramètres, type de retour) doit correspondre exactement.

Règles Clés

Exemple :

class Medecin {
    public void soignerPatient() {
        // logique de traitement commune
    }
}
class Chirurgien extends Medecin {
    @Override
    public void soignerPatient() {
        // traitement chirurgical spécialisé
    }
}
public class Execution {
    public static void main(String[] args) {
        Medecin medecin = new Medecin();
        medecin.soignerPatient(); // exécute Medecin.soignerPatient()
        Chirurgien chirurgien = new Chirurgien();
        chirurgien.soignerPatient(); // exécute Chirurgien.soignerPatient()
    }
}

Surcharge vs Redéfinition

Surcharge de Méthode (Overloading)Redéfinition de Méthode (Overriding)
Même classe, même nom, liste de paramètres différente. Méthode de la super-classe redéfinie dans la sous-classe avec signature identique.
Exemple :
void somme(int a, int b);
void somme(int a, int b, int c);
void somme(float a, double b);
Exemple :
class X { int somme() { ... } }
class Y extends X {
    @Override int somme() { ... }
}

Polymorphisme Dynamique (Exécution)

Lorsqu'une référence de super-classe pointe vers un objet de sous-classe, la JVM résout l'appel de méthode à l'exécution. C'est le vrai polymorphisme en action.

Medecin doc = new Chirurgien();
doc.soignerPatient(); // Exécute Chirurgien.soignerPatient()

La méthode réellement invoquée dépend du type de l'objet à l'exécution, pas du type de la référence.

Polymorphisme Statique vs Dynamique

Le polymorphisme statique (surcharge) est résolu à la compilation, tandis que le polymorphisme dynamique (redéfinition) est résolu à l'exécution.

Polymorphisme StatiquePolymorphisme Dynamique
Surcharge de méthode ; liaison à la compilation. Redéfinition de méthode ; liaison à l'exécution.
Exemple :
void somme(int a, int b);
void somme(float a, double b);
Exemple :
Medecin m = new Chirurgien();
m.soignerPatient();

Utilisation du Mot-Clé super

Lorsqu'une sous-classe doit étendre une méthode de la super-classe, super appelle l'implémentation parente avant d'ajouter sa propre logique.

class Chirurgien extends Medecin {
    @Override
    public void soignerPatient() {
        super.soignerPatient(); // logique de base
        // logique spécifique au chirurgien
    }
}

De même, super peut accéder aux champs protected ou public de la super-classe.

Exemple Pratique : Héritage, Polymorphisme & Super

Copiez le code ci-dessous dans votre IDE et observez la sortie.

public class Test {
    public static void main(String[] args) {
        X x = new X();
        Y y = new Y();
        y.m2();
        // Décommentez pour voir les effets de l'héritage
        // x.m1();
        // y.m1();
        // x = y; // référence parente vers objet enfant
        // x.m1();
        // y.a = 10; // erreur : a est private
    }
}
class X {
    private int a;
    int b;
    public void m1() {
        System.out.println("C'est la méthode m1 de la classe X");
    }
}
class Y extends X {
    int c;
    @Override
    public void m1() {
        System.out.println("C'est la méthode m1 de la classe Y");
    }
    public void m2() {
        super.m1();
        System.out.println("C'est la méthode m2 de la classe Y");
    }
}

Points Clés à Retenir

Java

  1. Maîtriser le polymorphisme Java : concepts, exemples et bonnes pratiques
  2. Classes Abstraites C# : Tutoriel Pratique avec Exemples de Code
  3. Méthode Java String length() : Comment obtenir la taille d'une chaîne (Exemple)
  4. Comprendre Java String.charAt() : Syntaxe, type de retour, exceptions et exemple pratique
  5. Méthode Java String.contains() : Comment vérifier la présence de sous-chaînes – Exemples pratiques
  6. Maîtriser Java String.endsWith() : Comment vérifier les suffixes de chaînes avec exemples
  7. Java Static Expliqué : Variables, Méthodes et Blocs – Exemples Pratiques
  8. Interface vs Classe Abstraite en Java : Comment Choisir la Bonne Abstraction
  9. Lecture de Fichiers en Java avec BufferedReader – Guide Pratique avec Exemples