• Home
  • LLMs
  • Python
  • Docker
  • Kubernetes
  • Java
  • Maven
  • All
  • About
Java | Surcharge de méthode (method overloading)
  1. Surcharge de méthode
  2. Invocation des méthodes

  1. Surcharge de méthode
    La surcharge de méthode est un mécanisme qui permet de définir plusieurs versions pour une méthode.

    Une seule règle s'applique : la liste des paramètres de la méthode doit être différente (nombre de paramètres ou/et types des paramètres) pour chaque méthode surchargée.

    La valeur de retour, les modificateurs, et les exceptions lancées par la méthode surchargée peuvent être équivalents ou différents des autres méthodes, sans que cela affecte les règles de surcharge.

    package com.mtitek.overloading;
    
    public class TestClass {
        public Integer multiplyOperation(Integer value1, Integer value2) {
            return value1 * value2;
        }
    
        public Double multiplyOperation(Double value1, Double value2) {
            return value1 * value2;
        }
    
        public static void main(String[] args) {
            TestClass testClass = new TestClass();
    
            System.out.println(testClass.multiplyOperation(5, 10)); // la méthode multiplyOperation(Integer value1, Integer value2) sera invoquée
    
            System.out.println(testClass.multiplyOperation(5.0, 10.0)); // la méthode multiplyOperation(Double value1, Double value2) sera invoquée
        }
    }
    Une méthode définie dans une superclasse peut être surchargée dans une sous-classe comme n'importe quelle autre méthode de cette sous-classe.

    Il faut se rappeler qu'il ne s'agit pas d'outrepassement (overriding) quand on change la signature (paramètres) de la méthode.
  2. Invocation des méthodes
    L'invocation des méthodes est résolue statiquement : lors de la compilation, le compilateur vérifie les arguments passés dans l'appel de la méthode ainsi que leurs types pour décider quelle méthode sera appelée à l'exécution du programme.

    Dans le cas d'une surcharge en modifiant uniquement les types des paramètres de la méthode par des sous-types, le compilateur verifie les types des arguments et les compare avec les types des paramètres de chaque méthode pour décider quelle méthode sera invoquée.

    package com.mtitek.overloading;
    
    public class TestClass {
        public void doSomeThing(TestClass testClass) {
            System.out.println("TestClass :" + testClass.toString());
        }
    
        public void doSomeThing(Object obj) {
            System.out.println("Object :" + obj.toString());
        }
    
        public static void main(String[] args) {
            TestClass testClass = new TestClass();
            Object obj = testClass;
    
            testClass.doSomeThing(testClass); // la méthode doSomeThing(TestClass testClass) sera invoquée
    
            testClass.doSomeThing(obj); // la méthode doSomeThing(Object obj) sera invoquée
    
            testClass.doSomeThing((TestClass) obj); // casting: la méthode doSomeThing(TestClass testClass) sera invoquée
        }
    }
    Rappel : quand on utilise dans le code une référence pour invoquer une méthode (refVar.foo()), le compilateur regarde uniquement les méthodes qui sont déclarées pour le type (et les types parents) de cette référence (refVar), et si la méthode invoquée n'est pas parmi ces méthodes alors le compilateur générera une erreur.

    On peut utiliser le casting pour indiquer au compilateur d'utiliser un autre type pour la vérification de l'appel des méthodes ((TestClass) obj).
© 2025  mtitek