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.
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>();
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.
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.
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(); } }
Drawing a circle
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.
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.
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(); } }
Dog barks
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.
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é |
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!