Maison  >  Article  >  Java  >  Polymorphisme : substitution de méthode de décodage en Java

Polymorphisme : substitution de méthode de décodage en Java

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 18:14:02932parcourir

Le

Polymorphism: Decoding Method Overriding in Java

Le remplacement de méthode est l'un des concepts fondamentaux du polymorphisme en Java, permettant à une sous-classe de fournir une implémentation spécifique d'une méthode déjà définie dans sa superclasse. Cette fonctionnalité puissante permet d'obtenir un polymorphisme d'exécution et permet une distribution dynamique de méthodes. Dans cet article, nous aborderons les concepts essentiels, les règles et les exemples concrets pour bien comprendre le remplacement de méthode .


Qu'est-ce que le remplacement de méthode ?

Le remplacement de méthode se produit lorsqu'une sous-classe redéfinit une méthode de sa superclasse avec la même signature de méthode (mêmes nom, paramètres et type de retour ou type de retour covariant). Contrairement à la surcharge de méthode, qui est résolue au moment de la compilation, la substitution de méthode atteint un polymorphisme d'exécution, où la méthode réelle appelée dépend du type d'exécution de l'objet.


1. Règles de remplacement de méthode

1. Cohérence des signatures de méthode :

  • Le nom de la méthode et la liste des paramètres de la sous-classe doivent correspondre exactement à la méthode de la superclasse.

2. Type de retour et types de retour covariants :

  • Le type de retour doit être soit le même, soit un type covariant (un sous-type du type de retour d'origine dans la superclasse).

3. Modificateurs d'accès :

  • Une méthode d'une sous-classe ne peut pas avoir un niveau d'accès plus restrictif que la méthode de la superclasse (par exemple, si la méthode de la superclasse est protégée, la sous-classe ne peut pas la rendre privée).

Public > Protégé > Par défaut (Package-Privé) > Privé

4. Visibilité de la méthode :

  • Les méthodes privées ne peuvent pas être remplacées. Au lieu de cela, si elles sont redéfinies dans la sous-classe, elles sont traitées comme des méthodes entièrement nouvelles.

Exemple : remplacement de méthode de base

package oops.polymorphism;

// Base class
public class MethodOverridingParent {

    // Private Methods CANNOT be overridden
    private String getName() {
        return "Hello";
    }

    // Display method to be overridden (Access Modifier: default)
    void display() {
        System.out.println("Parent Method Called");
    }

    // Return type is Number (parent class of Integer, Double, etc.)
    public Number getCount() {
        return 20;
    }
}

Dans MethodOverridingParent, seuls display() et getCount() peuvent être remplacés par des sous-classes, car elles sont accessibles au-delà de la classe parent. Cependant, getName() est privé, il ne peut donc pas être remplacé car il n'est pas hérité par les sous-classes.


2. Remplacement de méthode dans la classe enfant

package oops.polymorphism;

public class MethodOverridingChild extends MethodOverridingParent {

    // Access Level Increased; Default -> Protected
    @Override
    protected void display() {
        System.out.println("Child Method Called");
    }

    public static void main(String[] args) {

        // Calling Parent Class Method
        MethodOverridingParent parent = new MethodOverridingParent();
        parent.display(); // Output: Parent Method Called

        // Calling Child Class Overridden Method - Runtime Polymorphism
        MethodOverridingParent child = new MethodOverridingChild();
        child.display(); // Output: Child Method Called
    }
}

Explication : Puisque display() est remplacé dans la sous-classe MethodOverridingChild, l'invocation de display() sur une instance MethodOverridingChild appelle la version de l'enfant. C'est le polymorphisme d'exécution en action.


3. Types de retour covariants : un exemple pratique

La prise en charge par Java des types de retour covariants permet à la sous-classe de renvoyer un type plus spécifique que le type de retour de la superclasse. Cette approche suit le Principe de substitution de Liskov dans les principes SOLID, améliorant la flexibilité du code.

package oops.polymorphism;

// Base class
public class MethodOverridingParent {

    // Private Methods CANNOT be overridden
    private String getName() {
        return "Hello";
    }

    // Display method to be overridden (Access Modifier: default)
    void display() {
        System.out.println("Parent Method Called");
    }

    // Return type is Number (parent class of Integer, Double, etc.)
    public Number getCount() {
        return 20;
    }
}

Explication : Dans CovariantReturnType, getCount() remplace la méthode parent en renvoyant un Integer, un sous-type de Number, démontrant les types de retour covariants. La méthode reste publique car Java exige que le niveau d'accès d'une méthode remplacée ne puisse pas être réduit.


Remplacement de méthode ou surcharge de méthode

  • Method Overriding permet le polymorphisme dynamique et fonctionne dans les hiérarchies d'héritage.
  • La surcharge de méthode est une forme de polymorphisme statique obtenue au sein d'une même classe en ayant différents types ou nombres de paramètres.

Quand utiliser le remplacement de méthode

  1. Résolution dynamique des méthodes : les méthodes de remplacement sont résolues au moment de l'exécution en fonction du type d'objet, offrant une plus grande flexibilité.
  2. Extension du comportement : les sous-classes peuvent modifier ou étendre les fonctionnalités des méthodes de superclasse.

Conclusion

En comprenant et en appliquant la substitution de méthode, nous pouvons créer des applications Java plus flexibles, réutilisables et polymorphes qui adhèrent aux principes de la programmation orientée objet.


Articles connexes

  • Principes fondamentaux de Java

  • Les essentiels de l'entretien avec Array

  • L'essentiel de la mémoire Java

  • L'essentiel des mots-clés Java

  • L'essentiel du cadre de collections

Bon codage !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn