Introduction sur le remplacement dans les POO

Lors de l'implémentation du concept d'héritage dans oops, toutes les fonctions de la classe parente sont utilisées par toutes ses classes dérivées. Mais dans le cas où une classe dérivée souhaite l'implémentation spécifique de la fonction qui a été déclarée dans la classe parente mais en utilisant le même nom, la même signature et le même type de retour, alors la fonction prioritaire est utilisée. La substitution permet à la classe enfant de redéfinir la fonction qui a déjà été définie dans sa classe ou superclasse parent. De cette façon, on peut utiliser à la fois la définition en spécifiant l'objet de la classe tout en appelant la méthode. Par exemple, supposons qu'il y ait une fonction de somme dans la classe parent et la classe enfant et lors de l'appel de la fonction, nous utilisons l'objet de la classe enfant, la méthode présente dans la classe enfant sera appelée et, à la place, si vous utilisez l'objet classe parent, la méthode présente dans la classe parent sera appelé. cette méthode dans la classe enfant remplacerait la méthode présente dans ses superclasses.

Besoin de dérogation à la méthode

Voici les méthodes de remplacement:

  • La substitution de la méthode de polymorphisme d'exécution aide à atteindre le polymorphisme d'exécution dans les langages de programmation orientés objet comme c ++, java, c #, etc.
  • Le polymorphisme signifie avoir plusieurs formes, c'est-à-dire une signature et plusieurs définitions. dans les langages orientés objet lorsque la classe dérivée et la classe parente ont le même nom et la même signature d'une fonction, alors le compilateur résout la définition à un moment donné, a-t-il besoin d'appeler. Le polymorphisme d'exécution signifie que la liaison d'une définition de méthode à une méthode appelée se produit lors de l'exécution d'un programme. Il permet la mise en œuvre de l'aspect «une signature à définitions multiples» du polymorphisme. Cette fonctionnalité utilise la répartition dynamique des méthodes qui a un concept puissant de conception orientée objet pour apporter la réutilisation et la robustesse du code. Remplacer une méthode nous permet d'appeler une méthode vers l'une de ses classes dérivées sans connaître le type d'objet de la classe dérivée.
  • En utilisant cette fonctionnalité, on peut implémenter une définition spécialisée pour une fonction générique héritée de sa superclasse.

Comment le remplacement fonctionne dans les POO?

L'explication ci-dessous indique comment fonctionne le remplacement:

  • Les POO, nous aident à implémenter le polymorphisme d'exécution tout en héritant des fonctionnalités d'une classe dans une autre. Jetons un coup d'œil au fonctionnement de la substitution dans les POO. Supposons plus tard que nous avons un animal nommé superclasse qui a deux fonctions parler et manger. Il existe deux sous-classes chat et chien qui étend le nom d'animal superclasse.
  • Ces deux sous-classes utilisent les mêmes fonctions parlent et mangent mais modifient l'implémentation tout en conservant la signature des méthodes. Maintenant, dans notre méthode principale, si vous appelez ces fonctions en choisissant la variable de référence, au moment de l'exécution uniquement, il sera décidé quelle fonction doit appeler. Par exemple, si l'objet contient la différence de classe enfant qui est chat ou chien, alors la fonction d'une classe respective sera appelée sinon, si l'objet contient la référence de la classe parent, alors la fonction d'une classe animale sera appelée.
  • Ici, nous devons voir que la fonction appelée ne dépend pas du type de variable de référence. Ceci est décidé par le compilateur au moment de l'exécution, mais il aide à implémenter le polymorphisme d'exécution. Il aide également à implémenter la définition spécialisée de la méthode de la définition générique de méthode dans la classe parente.

Code:

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Cat extends Animal(
//Overriding method
public void eat()
(
System.out.println("Cat is eating");
)
public void speak()
(
System.out.println("Cat is meowing");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an1 = new Cat();
Animal an2 = new Animal();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Production:

Remarque: Une variable de référence de type enfant ne peut pas être utilisée pour contenir une référence au type parent.

Règles pour remplacer une méthode

Voici les règles de priorité:

Règle 1

Une liste des paramètres déclarés dans la fonction de la classe parent doit correspondre à la liste des paramètres mentionnés dans la définition de la méthode prioritaire dans la classe enfant.

Par exemple:

La méthode dans la classe parent

public int test1(int a);

Une méthode dans la classe enfant - chaîne publique test1 (); // la substitution de méthode ne sera pas prise en charge ici car le type de retour et les arguments sont différents mais aucune erreur de compilation ne se produira. Cette méthode sera considérée comme une nouvelle méthode d'une classe enfant.

Règle n ° 2

Le type de retour de la méthode présente dans la classe enfant doit être le même ou un sous-type du type de retour de la méthode en cours de substitution.

Par exemple:

La méthode dans une classe parent

public Object test1(int a);

La méthode dans la classe enfant

public String test1();

Incorrect

La méthode dans la classe parent

public String test1(int a);

La méthode dans la classe enfant

public Object test1();

Règle n ° 3

Le spécificateur d'accès présent dans la méthode de la classe parent doit être également restrictif ou plus restrictif que la méthode qui le remplace dans la classe enfant.

Incorrect

La méthode dans la classe parent

public int test1(int a);

Méthode dans la classe enfant

private int test1() ; // more restrictive than public one

Règle n ° 4

Seule la méthode d'instance avec le spécificateur d'accès protégé public ou par défaut peut être remplacée. En effet, seule cette méthode d'instance peut être héritée par sa sous-classe et donc être remplacée. Dans le cas où la méthode d'instance spécifiée dans la classe parente est un exemple de méthode publique plus restrictive, elle ne sera pas héritée dans sa sous-classe et le fait si quelqu'un définit la même méthode dans une sous-classe, ce scénario n'est pas considéré comme une méthode prioritaire, contrairement aux méthodes publiques. être hérité cela ne peut pas être remplacé.

Par exemple:

La méthode dans la classe parent

public int test1(int a); //can be inherited and overridden

La méthode dans la classe enfant

private int test1();

Incorrect

La méthode dans la classe parent

private int test1(int a); //can not be inherited and overridden

La méthode dans la classe enfant

private int test1();//not overriding method of the parent class

Il est considéré comme une nouvelle méthode privée de la classe enfant

Règle n ° 5

Le super mot clé peut être utilisé pour appeler la fonction de la classe parent qui a été remplacée par sa sous-classe.

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
super.speak(); // Here super keyword is used to call the speak function of the super class.ieAnimal
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an2 = new Animal();
an.speak();
an.eat();
an2.eat();
)
)

Production:

Règle n ° 6

Le constructeur d'une classe ne peut pas être remplacé par ses sous-classes car un constructeur de deux classes ne peut pas être le même.

Règle n ° 7

Gestion des exceptions lors de la substitution.

  • La méthode Incase dans la classe parent ne lève aucune exception, alors la méthode prioritaire présente dans la sous-classe est autorisée à lever une seule exception non vérifiée. Si la méthode prioritaire affiche une exception vérifiée, le compilateur affichera une erreur.
  • Si la méthode de la classe parente qui est substituée lève une méthode de substitution de tandem d'exception présente dans la sous-classe doit passer par une exception du même niveau ou son sous-type dans la hiérarchie d'exception ou aucune exception du tout.

Règle n ° 8

La substitution de méthode dans l'héritage à plusieurs niveaux est également possible.

Code:

class Creature (
//Overriding method
public void eat()
(
System.out.println("Creature is eating");
)
public void speak()
(
System.out.println("Creature is speaking");
)
)
class Animal extends Creature(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(public static void main(String() args)(
Creature an=new Dog();
Animal an1 = new Animal();
Animal an2 = new Dog();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Production:

Règle n ° 9

Remplacement des règles de méthode en Java

  • Une méthode synchronisée peut facilement être remplacée par une méthode non synchronisée et vice versa.
  • La méthode abstraite présente dans les classes abstraites ou les interfaces est destinée à être remplacée pour fournir une implémentation spécifique aux méthodes déclarées, sinon elle affichera une erreur au moment de la compilation.
  • La définition d'une méthode statique portant le même nom qu'une méthode statique présente dans la classe parent est connue sous le nom de méthode masquant et non remplaçant la méthode car elle n'implémente pas le polymorphisme d'exécution.
  • Les méthodes finales ne peuvent pas être remplacées.

Règle n ° 10

Substitution de méthode en C ++

La substitution de méthode dans c plus est obtenue en déclarant une méthode virtuelle. Un mot clé virtuel est utilisé pour obtenir le polymorphisme d'exécution en c ++. Alors qu'en Java toutes les fonctions sont par défaut considérées comme virtuelles.

Règle n ° 11

La substitution de méthode est différente de la surcharge de méthode car c'est un processus de polymorphisme d'exécution tandis que la surcharge et la méthode sont un exemple de polymorphisme au moment de la compilation. Dans la substitution de méthode, il est obligatoire de conserver la signature de la méthode. lorsque nous apportons des modifications au type de retour de méthode ou à la liste de paramètres, le compilateur la traite comme une surcharge de méthode.

Remplacement de méthode Surcharge de méthode
class A(
public void test()(
System.out.println("In class A");
)
)
class B extends A(
public void test()(
System.out.println("In class A");
))public class Test(
public static void main(String() args)(
A a=new B();
a.test();
A b =new A();
b.test();
))
class A(
public void test()(
System.out.println("Method without arguments");
)
public void test(int x)(
System.out.println("Method with arguments");
System.out.println(x);
))public class Test(
public static void main(String() args)(
A a=new A();
a.test();
a.test(2);
)
)

Production:

Quand utiliser la méthode prioritaire?

Voici les méthodes d'utilisation de la substitution:

  • Les POO offrent une merveilleuse fonction d'héritage pour former une grande hiérarchie entre la superclasse et la sous-classe, de la moindre spécialisation à la plus grande spécialisation.
  • Pouvons-nous utiliser la superclasse pour fournir un cadre qui peut être hérité dans toutes ses sous-classes et les sous-classes, nous pouvons définir le fonctionnement différent de ces méthodes. Ceci est réalisé en remplaçant la fonction où un fonctionnement spécialisé peut être fourni aux sous-classes init des méthodes héritées.
  • Il aide également à fournir un cadre pour plusieurs classes en fournissant une collection de variables et la méthode qui doit être implémentée dans toutes ses sous-classes.

Conclusion

Les POO et les concepts rendent le code robuste et facile à réutiliser lorsqu'ils sont utilisés efficacement. La fonctionnalité prioritaire améliore l'utilisation de l'héritage pour fournir l'implémentation spécifique à la méthode générique de class parent.in ses sous-classes. Cela utilise le concept de polymorphisme d'exécution pour déclencher la définition correcte de la méthode. L'envoi de méthode dynamique est effectué au moment de l'exécution uniquement, ce qui vérifie la référence de la classe que l'objet détient pour appeler la méthode. Cette fonctionnalité est guidée à travers diverses règles et ne s'applique pas aux méthodes statiques. Nous pouvons implémenter la substitution de méthode dans n'importe quel langage orienté objet et rendre notre programme plus rapide et robuste.

Articles recommandés

Ceci est un guide de remplacement dans les POO. Ici, nous discutons de la façon dont le remplacement fonctionne dans les POO, quand l'utiliser, et 11 règles avec des codes et une sortie. Vous pouvez également consulter nos autres articles connexes pour en savoir plus-

  1. Surcharger en PHP
  2. Remplacement en JavaScript
  3. Qu'est-ce que la POO?
  4. Remplacement de méthode en C #
  5. Exemples de remplacement en Java
  6. Méthode statique JavaScript | Comment travailler avec des exemples