9. Polymorphisme

Le terme polymorphisme indique la possibilité de définir des méthodes et des propriétés du même nom, de sorte que, par exemple, une classe dérivée peut redéfinir une méthode de classe de base portant le même nom.

Continuons à utiliser nos classes Personne et Étudiant crées dans la leçon précédente pour comprendre le concept de polymorphisme. Initialement, nous avions défini la méthode public void AfficheMessage() dans la classe Personne, mais nous n’avons pas encore écrit son contenu. Nous voulons que cette routine affiche les informations personnelles de la personne.

Il est naturel de penser que, de la même manière, la classe Étudiant a une méthode AfficheMessage() qui montre, en plus des informations personnelles, celles d’un étudiant. Nous devons donc définir les méthodes comme il suit :

 
 
  1. public class Personne
  2. {
  3. //…
  4. public virtual void AfficheMessage()
  5. {
  6. System.Console.WriteLine(“Prenom: ” + mPrenom + ” ” + mNom);
  7. }
  8. //…
  9. }
  10. public class Etudiant : Personne
  11. {
  12. //…
  13. public override void AfficheMessage()
  14. {
  15. System.Console.WriteLine(“Prenom: ” + mPrenom + ” ” + mNom);
  16. System.Console.WriteLine(“Matricule: ” + mMatricule);
  17. }
  18. //…
  19. }

La méthode AfficheMessage() est définie dans les deux classes mais se comporte différemment, puisque celle de la classe Étudiant affiche également le numéro de matricule.

La méthode AfficheMessage() correspondante sera appelée lorsqu’on déclare un objet Personne ou Étudiant. Pour ce faire, nous avons utilisé le polymorphisme : la méthode AfficheMessage() dans la classe de base est déclarée en utilisant le mot-clé «virutal» (ce qui correspond à Overridable dans Visual Basic.NET) : avec celle-ci, nous indiquons qu’on peut obtenir une autre définition pour la même routine dans une classe dérivée.

En fait, AfficheMessage() a été défini en entrant le mot-clé «override» (Overrides en VB) : de cette manière, on dit que cette fonction écrase un procédé du même nom qui a été défini dans la classe de base.

Dans certains cas, il peut être nécessaire, dans la méthode redéfinie, de rappeler la méthode à redéfinir. Dans notre exemple, la méthode AfficheMessage() de la classe Étudiant peut rappeler la méthode AfficheMessage() de Personne, qui montre déjà le prénom et le nom, en se limitant à afficher uniquement les informations de base d’un étudiant.

Pour ce faire, nous devons utiliser le mot-clé « base » qui, comme mentionné dans la leçon précédente, nous permet d’accéder à la classe de dérivation ; à la lumière de ces considérations, la méthode AfficheMessage() devient :

 
 
  1. public override void AfficheMessage()
  2. {
  3. base.AfficheMessage();
  4. System.Console.WriteLine(“Matricule: ” + mMatricule);
  5. }

 

New

Fondamentalement, AfficheMessage() appelle la méthode correspondante dans la classe de base.

Il existe une autre façon d’exploiter le polymorphisme, en utilisant le mot-clé ‘new‘ (équivalent à Shadows dans VB.NET), qui cache une définition de classe de base du même nom. L’exemple ci-dessus, en utilisant « new », devient :

 
 
  1. public class Personne
  2. {
  3. //…
  4. public void AfficheMessage()
  5. {
  6. System.Console.WriteLine(“Prenom: ” + mPrenom + ” ” + mNom);
  7. }
  8. //…
  9. }
  10. public class Etudiant : Personne {
  11. //…
  12. public new void AfficheMessage()
  13. {
  14. base.AfficheMessage();
  15. System.Console.WriteLine(“Matricule: ” + mMatricule);
  16. }
  17. //…
  18. }

 

Comme vous pouvez le voir, dans la classe de base, le mot clé ‘virtual‘ a disparu, alors que dans la classe Étudiant, la méthode AfficheMessage() est précédée par ‘new‘.

Il est important de noter qu’en utilisant les paires « virtual » et « override« , la méthode qui remplace une routine de base doit avoir non seulement le même nom mais aussi le même nombre d’arguments et le même type.

Au lieu de cela, en utilisant « new« , nous pouvons complètement redéfinir une méthode. Avec ‘new’ on peut même cacher une variable de la classe de base avec une méthode entière dans la classe dérivée.

Ce rapide aperçu est juste une brève introduction au polymorphisme, pour en savoir plus, il est toujours préférable de consulter la documentation en ligne.

 

 

 

 

Précédent : 8. Héritage                                                                                                                                                   Suivant : 10. Overloading

Comments
Chargement ...
"