La différence entre la liaison statique et dynamique en Java

Mohammad Irfan 12 octobre 2023
  1. Liaison statique en Java
  2. Exemple de liaison statique en Java
  3. Liaison dynamique en Java
  4. Exemple de liaison dynamique en Java
  5. Liaison statique et liaison dynamique en Java
La différence entre la liaison statique et dynamique en Java

Ce didacticiel présente la différence entre la liaison statique et la liaison dynamique en Java et répertorie quelques exemples de codes pour vous guider sur le sujet.

La liaison relie un appel de méthode à l’implémentation de méthode, et elle a deux types : statique et dynamique. Selon le polymorphisme, un objet peut avoir plusieurs formes, et ces formes peuvent être résolues au moment de la compilation ou de l’exécution.

La liaison statique se produit lorsque l’appel de méthode est lié à l’implémentation de méthode au moment de la compilation. La liaison dynamique se produit lorsque la liaison a lieu pendant l’exécution. Apprenons-en plus sur ces deux types de reliure et examinons quelques exemples.

Liaison statique en Java

Comme indiqué ci-dessus, la liaison statique est la liaison qui se produit pendant la compilation. Il est également appelé Early Binding car il se produit pendant le temps de compilation lui-même.

Dans le cas de Static Binding, le compilateur sait exactement quelle implémentation de la méthode utiliser. Il utilise les informations de type ou de classe pour la liaison ; la surcharge de méthode est un exemple de liaison statique.

Notez que toutes les méthodes statiques, finales et privées utilisent la liaison statique, car les classes enfants ne peuvent pas remplacer les méthodes statiques, finales et privées. Le compilateur sait au moment de la compilation quelle implémentation de méthode utiliser. Puisque le compilateur sait que les méthodes de la classe parent ne peuvent pas être redéfinies, il utilise toujours l’implémentation de la classe parent de la méthode.

De plus, la liaison statique est également plus performante car moins de surcharge est impliquée.

Exemple de liaison statique en Java

Dans le code ci-dessous, la classe de l’école a une méthode statique ringBell(), et cette classe est étendue par Classroom. La Classroom dispose également d’une méthode ringBell().

Puisque la méthode ringBell() est statique, le compilateur vérifie simplement le type de classe et ne considère pas la classe d’objet assignée. Ainsi lorsqu’une classe School est utilisée pour créer un objet de Classroom(School s2 = new Classroom()), l’implémentation de la classe School est considérée et non la classe Classroom.

class School {
  public static void ringBell() {
    System.out.println("Ringing the school bell...");
  }
}
class Classroom extends School {
  public static void ringBell() {
    System.out.println("Ringing the classroom bell...");
  }
}
public class Main {
  public static void main(String[] args) {
    School s1 = new School(); // Type is School
    s1.ringBell();
    Classroom c1 = new Classroom(); // Type is Classroom
    c1.ringBell();
    School s2 = new Classroom(); // Type is School
    s2.ringBell();
  }
}

Production:

Ringing the school bell...
Ringing the classroom bell...
Ringing the school bell...

Liaison dynamique en Java

La liaison dynamique résout la liaison au moment de l’exécution car le compilateur ne sait pas quelle implémentation utiliser au moment de la compilation.

Elle est également connue sous le nom de Late Binding car la liaison est résolue à un stade ultérieur au cours de l’exécution et non au moment de la compilation. La liaison dynamique utilise également l’objet pour la liaison et non le type ou la classe ; la substitution de méthode est un exemple de liaison dynamique.

Exemple de liaison dynamique en Java

Dans le code ci-dessous, la méthode ringBell() n’est pas statique, donc une substitution se produira. Le compilateur ne sait pas quelle implémentation de la méthode ringBell() doit être utilisée, la liaison est donc résolue au moment de l’exécution.

A l’exécution, c’est l’objet qui est pris en compte et non le type qui a servi à le créer. Ainsi lorsqu’une classe School est utilisée pour créer un objet de Classroom, alors l’implémentation de la classe Classroom est considérée et non la classe School.

class School {
  public void ringBell() {
    System.out.println("Ringing the school bell...");
  }
}
class Classroom extends School {
  @Override
  public void ringBell() {
    System.out.println("Ringing the classroom bell...");
  }
}
public class Main {
  public static void main(String[] args) {
    School s1 = new School(); // Type is School and object is of School
    s1.ringBell();
    Classroom c1 = new Classroom(); // Type is Classroom and object is of Classroom
    c1.ringBell();
    School s2 = new Classroom(); // Type is School and object is of Classroom
    s2.ringBell();
  }
}

Production:

Ringing the school bell...
Ringing the classroom bell...
Ringing the classroom bell...

Liaison statique et liaison dynamique en Java

La liaison statique est la connexion de l’appel de méthode à l’implémentation de la méthode au moment de la compilation. D’autre part, la liaison dynamique est la connexion de l’appel de méthode à l’implémentation de la méthode au moment de l’exécution.

Connaître ces deux techniques est important pour comprendre le concept de polymorphisme. La liaison statique est utilisée par les méthodes statiques, finales et privées ; cette liaison entre en action dans le cas de méthodes surchargées. La liaison dynamique est utilisée pour les méthodes virtuelles (par défaut virtuelles en Java) et utilisée pour lier les méthodes surchargées.

Article connexe - Java Method