Remplacement de méthode Java

Dans ce didacticiel, nous allons découvrir le remplacement de méthode en Java à l'aide d'exemples.

Dans le dernier tutoriel, nous avons appris l'héritage. L'héritage est une propriété POO qui nous permet de dériver une nouvelle classe (sous-classe) à partir d'une classe existante (superclasse). La sous-classe hérite des attributs et des méthodes de la superclasse.

Maintenant, si la même méthode est définie à la fois dans la superclasse et la sous-classe, la méthode de la classe de sous-classe remplace la méthode de la superclasse. C'est ce qu'on appelle le remplacement de méthode.

Exemple 1: remplacement de méthode

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Sortie :

 Je suis un chien. 

Dans le programme ci-dessus, la displayInfo()méthode est présente à la fois dans la superclasse Animal et dans la sous-classe Chien.

Lorsque nous appelons en displayInfo()utilisant l'objet d1 (objet de la sous-classe), la méthode à l'intérieur de la sous-classe Dog est appelée. La displayInfo()méthode de la sous-classe remplace la même méthode de la superclasse.

Notez l'utilisation de l' @Overrideannotation dans notre exemple. En Java, les annotations sont les métadonnées que nous avons utilisées pour fournir des informations au compilateur. Ici, l' @Overrideannotation spécifie au compilateur que la méthode après cette annotation remplace la méthode de la superclasse.

Il n'est pas obligatoire d'utiliser @Override. Cependant, lorsque nous utilisons cela, la méthode doit suivre toutes les règles de remplacement. Sinon, le compilateur générera une erreur.

Règles de remplacement Java

  • La superclasse et la sous-classe doivent avoir le même nom de méthode, le même type de retour et la même liste de paramètres.
  • Nous ne pouvons pas remplacer la méthode déclarée comme finalet static.
  • Nous devons toujours remplacer les méthodes abstraites de la superclasse (nous en parlerons dans les tutoriels ultérieurs).

super mot-clé en remplacement Java

Une question courante qui se pose lors de l'exécution de la substitution en Java est:

Pouvons-nous accéder à la méthode de la superclasse après la substitution?

Eh bien, la réponse est oui . Pour accéder à la méthode de la superclasse depuis la sous-classe, on utilise le supermot - clé.

Exemple 2: utilisation d'un super mot-clé

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( super.displayInfo(); System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Sortie :

Je suis un animal. Je suis un chien.

Dans l'exemple ci-dessus, la sous-classe Dog remplace la méthode displayInfo()de la superclasse Animal.

Lorsque nous appelons la méthode en displayInfo()utilisant l'objet d1 de la sous-classe Dog, la méthode à l'intérieur de la sous-classe Dog est appelée; la méthode à l'intérieur de la superclasse n'est pas appelée.

À l'intérieur displayInfo()de la sous-classe Dog, nous avons l'habitude super.displayInfo()d'appeler displayInfo()la superclasse.

Il est important de noter que les constructeurs en Java ne sont pas hérités. Par conséquent, il n'existe pas de substitution de constructeur en Java.

Cependant, nous pouvons appeler le constructeur de la superclasse à partir de ses sous-classes. Pour cela, nous utilisons super(). Pour en savoir plus, visitez le super mot-clé Java.

Spécificateurs d'accès dans le remplacement de méthode

La même méthode déclarée dans la superclasse et ses sous-classes peuvent avoir différents spécificateurs d'accès. Cependant, il existe une restriction.

Nous ne pouvons utiliser ces spécificateurs d'accès que dans les sous-classes qui fournissent un accès plus large que le spécificateur d'accès de la superclasse. Par exemple,

Supposons qu'une méthode myClass()de la superclasse soit déclarée protected. Ensuite, la même méthode myClass()dans la sous-classe peut être soit publicou protected, mais pas private.

Exemple 3: Spécificateur d'accès en remplacement

 class Animal ( protected void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Sortie :

 Je suis un chien. 

Dans l'exemple ci-dessus, la sous-classe Dog remplace la méthode displayInfo()de la superclasse Animal.

Chaque fois que nous appelons en displayInfo()utilisant le d1 (objet de la sous-classe), la méthode à l'intérieur de la sous-classe est appelée.

Notez que, le displayInfo()est déclaré protecteddans la superclasse Animal. La même méthode a le publicspécificateur d'accès dans la sous-classe Dog. Cela est possible car le publicfournit un accès plus large que le protected.

Remplacer les méthodes abstraites

En Java, les classes abstraites sont créées pour être la superclasse des autres classes. Et, si une classe contient une méthode abstraite, il est obligatoire de la remplacer.

Nous en apprendrons plus sur les classes abstraites et le remplacement des méthodes abstraites dans les didacticiels ultérieurs.

Articles intéressants...