JavaRush /Blog Java /Random-FR /Différences entre les liaisons précoces et tardives en Ja...

Différences entre les liaisons précoces et tardives en Java

Publié dans le groupe Random-FR
Pour comprendre la différence entre la liaison précoce (statique) et tardive (dynamique) en Java, vous devez d'abord comprendre ce qu'est la liaison . La liaison signifie qu'il existe une connexion entre le lien et le code. Par exemple, une variable à laquelle vous faites référence est liée au code dans lequel elle est définie. De même, la méthode appelée est liée à l’emplacement du code où elle est définie.
Différences entre les liaisons précoces et tardives en Java - 1
Il existe deux types de liaison de méthode dans le langage Java : la liaison anticipée (également appelée statique) et la liaison tardive (respectivement dynamique) . L'appel d'une méthode en Java signifie que la méthode est liée à un code spécifique, soit au moment de la compilation, soit au moment de l'exécution, lorsque le programme s'exécute et que les objets sont créés. Comme son nom l'indique, la liaison statique est de nature plus statique, car elle se produit au moment de la compilation, ce qui signifie que le code « sait » quelle méthode appeler après avoir compilé le code source Java dans des fichiers de classe. Et comme cela fait référence à une étape précoce du cycle de vie du programme, on parle également de liaison précoce. D'un autre côté, la liaison dynamique se produit au moment de l'exécution, après l'exécution du programme par la machine virtuelle Java. Dans ce cas, la méthode à appeler est déterminée par l'objet spécifique, de sorte que les informations ne sont pas disponibles au moment de la compilation car les objets sont créés au moment de l'exécution. Et comme cela se produit tard dans le cycle de vie du programme, cela s'appelle une liaison tardive en Java.
Ainsi, la différence fondamentale entre les liaisons statiques et dynamiques en Java est que la première se produit tôt, au moment de la compilation, en fonction du type de variable de référence, et la seconde se produit plus tard, au moment de l'exécution, en utilisant des objets concrets.
Examinons quelques différences supplémentaires pour mieux comprendre cela et également être en mesure de répondre à cette question très populaire posée dans les entretiens Java.

Liaison précoce et tardive en Java

Il existe de nombreuses différences entre les liaisons statiques et dynamiques en Java, mais la plus importante est la manière dont la JVM les utilise. Vous êtes-vous déjà demandé comment la JVM décide quelle méthode appeler lorsqu'il existe plusieurs méthodes portant le même nom dans la portée ? Si vous avez déjà utilisé la surcharge ou le remplacement de méthodes, vous savez qu'en Java, vous pouvez avoir plusieurs méthodes portant le même nom. Dans le cas de Java, la JVM utilise à la fois des liaisons statiques et dynamiques pour sélectionner la méthode souhaitée.

Exemple de liaison statique et dynamique en Java

Dans ce programme, vous verrez que la liaison des méthodes virtuelles ne se produit pas au moment de la compilation à l'aide de la liaison statique, car cela appellerait une méthode de la superclasse, comme c'est le cas avec les méthodes statiques liées tôt. Si une méthode d'une sous-classe est appelée, un objet spécifique a été utilisé pour lier la fonction au moment de l'exécution et, par conséquent, la liaison dynamique est utilisée pour lier les fonctions virtuelles.
public class Main {
  public static void main(String[] args) {

    // Пример статического и динамического связывания в Java
    Insurance current = new CarInsurance();

    // Динамическое связывание на основе an object
    int premium = current.premium();

    // Статическое связывание на основе класса
    String category = current.category();

    System.out.println("premium : " + premium);
    System.out.println("category : " + category);
  }
}

class Insurance{
  public static final int LOW = 100;

  public int premium(){
    return LOW;
  }

  public static String category(){
    return "Insurance";
  }

}

class CarInsurance extends Insurance{
  public static final int HIGH = 200;

  public int premium(){
    return HIGH;
  }

  public static String category(){
    return "Car Insurance";
  }

}
Результаты выполнения:

premium : 200
category : Insurance
Comme vous pouvez le voir, un appel de méthode premium()entraînait l’exécution d’une méthode de la sous-classe, tandis qu’un appel de méthode category()entraînait l’exécution d’une méthode de superclasse. En effet, premium()- est une méthode virtuelle, qui est résolue à l'aide d'une liaison tardive, tandis que category()- est une méthode statique, qui est résolue à l'aide d'une liaison statique au moment de la compilation par nom de classe.
Vous souhaitez en savoir plus sur Java ? Rejoignez le groupe Développeur Java !

Différences entre les liaisons précoces et tardives en Java

Maintenant que vous savez comment Java lie les appels de méthode et comment fonctionne la liaison statique et dynamique, récapitulons les principales différences entre la liaison précoce et tardive en Java :
  1. La liaison statique se produit au moment de la compilation, tandis que la liaison dynamique se produit au moment de l'exécution.

  2. Étant donné que la liaison statique se produit au début du cycle de vie d'un programme, on parle de liaison précoce. De même, la liaison dynamique est également appelée liaison tardive car elle se produit plus tard dans l'exécution du programme.

  3. La liaison statique est utilisée en langage Java pour résoudre les méthodes surchargées, tandis que la liaison dynamique est utilisée en langage Java pour résoudre les méthodes remplacées.

  4. De même, les méthodes privées, statiques et terminales sont résolues à l'aide d'une liaison statique car elles ne peuvent pas être remplacées, tandis que toutes les méthodes virtuelles sont résolues à l'aide d'une liaison dynamique.

  5. Dans le cas d'une liaison statique, ce ne sont pas des objets concrets qui sont utilisés, mais des informations de type, c'est-à-dire le type de la variable de référence, qui sont utilisées pour découvrir la méthode souhaitée. D'autre part, la liaison dynamique utilise un objet spécifique pour trouver la méthode souhaitée en Java.
Voici un bon exercice basé sur les concepts de liaison statique et dynamique en Java. Pouvez-vous répondre à la question : « Qu’est-ce qui sera généré lorsque le programme suivant sera exécuté ? »
Différences entre les liaisons précoces et tardives en Java - 2
Que produira ce programme ? Collection, Setou HashSet? C'est tout ce que nous voulions vous dire sur les différences entre les liaisons précoces (statiques) et tardives (dynamiques) en Java. C'est l'une des meilleures questions d'entretien téléphonique Java car elle offre de nombreuses opportunités de tester la profondeur des connaissances du candidat. N'oubliez jamais que les méthodes privées , statiques et finales sont liées à l'aide de liaisons statiques , tandis que les méthodes virtuelles sont liées à l'aide de liaisons dynamiques . De même, le meilleur exemple de liaison statique est la surcharge de méthode, tandis que la substitution est dynamique. Source
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION