Maison  >  Article  >  Java  >  Différence entre la liaison précoce et la liaison tardive en Java

Différence entre la liaison précoce et la liaison tardive en Java

WBOY
WBOYavant
2023-09-14 08:57:15999parcourir

Différence entre la liaison précoce et la liaison tardive en Java

En programmation orientée objet, méthode qui relie un appel de stratégie à son exécution. Java est un langage de programmation orienté objet qui prend en charge l'autorité précoce et l'autorité tardive, appelées respectivement autorité inactive et autorité active. Les deux formes de reliure présentent des avantages et des applications. Dans cet article, nous présenterons la syntaxe, l'explication et les différences entre la liaison anticipée et la liaison tardive en Java.

Grammaire

La syntaxe de la liaison anticipée en Java est la suivante.

<ClassName> <objectName> = new <ClassName>();

La syntaxe de la liaison tardive en Java est la suivante.

<ClassName> <objectName> = new <DerivedClassName>();

Explication de la grammaire

Le type de la classe est déterminé au moment de la compilation avec une liaison anticipée, et l'implémentation de la méthode est sélectionnée en fonction du type spécifié de l'objet. Cela signifie que le compilateur connaît la classe spécifique de l'objet et peut lier les appels de méthode directement aux implémentations de méthode.

La liaison tardive, quant à elle, détermine le type de classe au moment de l'exécution et sélectionne les implémentations de méthodes en fonction du type réel de l'objet. Cela indique que le compilateur ne connaît pas la classe précise de l'objet et doit s'appuyer sur l'environnement d'exécution pour trouver l'implémentation correcte de la méthode.

Méthode 1 : Liaison anticipée

Au début de la liaison, les appels de méthode sont résolus au moment de la compilation. Considérons l'algorithme de liaison précoce suivant -

  • Déclarez une classe appelée Shape et utilisez une méthode appelée draw().

  • Créez une sous-classe nommée Circle pour étendre la classe Shape.

  • Implémentez la méthode draw() dans la classe Circle.

  • Créez un objet de la classe Circle en utilisant la liaison anticipée.

  • Appelez la méthode draw() de l'objet.

Exemple

class Shape {
   public void draw() {
      System.out.println("Drawing a shape");
   }
}

class Circle extends Shape {
   @Override
   public void draw() {
      System.out.println("Drawing a circle");
   }
}

public class Main {
   public static void main(String[] args) {
      Shape shape = new Circle();
      shape.draw();
   }
}

Sortie

Drawing a circle

Description du code dans la méthode 1

Nous avons une classe Shape avec une fonction draw() qui imprime "draw shape" dans ce code. Nous avons également une classe Circle qui étend la classe Shape et remplace la fonction draw() pour afficher "dessiner un cercle". Dans la classe Main, nous avons créé un objet de la classe Circle en utilisant une liaison anticipée en le déclarant comme type Shape. Lorsque nous appelons la fonction draw() d'un objet forme, le résultat sera "dessiner un cercle". En effet, l'appel de méthode est lié à l'implémentation de la classe Circle au moment de la construction.

Méthode 2 : Reliure tardive

En cas de liaison tardive, les appels de méthode sont résolus au moment de l'exécution. Considérons l'algorithme de liaison tardive suivant -

  • Déclarez une classe appelée Animal et utilisez une méthode appelée makeSound().

  • Créez deux sous-classes nommées Chien et Chat pour étendre la classe Animal.

  • Implémentez la méthode makeSound() dans les classes Chien et Chat.

  • Créez un objet de classe Dog en utilisant la liaison tardive.

  • Appelez la méthode makeSound() de l'objet.

Exemple

class Animal {
   public void makeSound() {
      System.out.println("Animal makes a sound");
   }
}

class Dog extends Animal {
   @Override
   public void makeSound() {
      System.out.println("Dog barks");
   }
}

class Cat extends Animal {
   @Override
   public void makeSound() {
      System.out.println("Cat meows");
   }
}

public class Main {
   public static void main(String[] args) {
      Animal animal = new Dog();
      animal.makeSound();
   }
}

Sortie

Dog barks

Description du code dans la méthode 2

Dans ce code, nous avons une classe Animal, qui a une méthode makeSound() qui affiche "Animal obtient un son". Nous avons également deux sous-classes, Dog et Cat, qui étendent la classe Animal et remplacent la méthode makeSound() pour afficher respectivement « Le chien aboie » et « Le chat miaule ». Dans la classe Main, nous avons créé un objet de classe Dog en utilisant une liaison tardive et l'avons déclaré comme type Animal. Lorsque nous appelons la méthode makeSound() sur l'objet animal, le résultat sera "Le chien aboie". En effet, l'appel de méthode est lié à l'implémentation de la classe Dog au moment de l'exécution en fonction du type réel de l'objet.

La différence entre la liaison anticipée et la liaison tardive en Java

Différences

Reliure anticipée

Reliure tardive

Temps d'analyse

Temps de compilation

Exécution

Mise en œuvre de la méthode

Déterminé en fonction du type déclaré de l'objet

Déterminé en fonction du type réel de l'objet

Flexibilité

Flexibilité limitée dans la mise en œuvre de méthodes à changement dynamique

Offre de la flexibilité grâce à la répartition dynamique des méthodes et au polymorphisme

Performances

Performances rapides puisque les appels de méthode sont résolus au moment de la compilation

Étant donné que les appels de méthode sont analysés au moment de l'exécution, les performances sont légèrement plus lentes

Déclaration d'objet

La déclaration d'objet utilise le type de classe

La déclaration d'objet utilise un type de classe dérivé

Conclusion

La liaison anticipée et la liaison tardive sont deux concepts importants en Java, qui déterminent la manière dont les appels de méthode sont analysés. La liaison tardive résout les appels de méthode en fonction du type réel de l'objet au moment de l'exécution, tandis que la liaison précoce lie les appels de méthode à son implémentation au moment de la compilation. Chaque méthode a ses propres avantages et utilisations. Bien que la liaison anticipée offre de meilleures performances car les appels de méthode sont résolus au moment de la compilation, elle ne permet pas de modifications dynamiques des implémentations de méthodes. La liaison tardive, en revanche, permet une répartition dynamique des méthodes, permettant le polymorphisme et la flexibilité dans les invocations de méthodes. Comprendre la différence entre la liaison précoce et la liaison tardive est crucial pour écrire des programmes Java efficaces et flexibles.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer