1. Baleines et vaches

Voici un fait zoologique intéressant : une vache est beaucoup plus proche d'une baleine que, par exemple, d'un hippopotame. Il s'avère que les vaches et les baleines sont des parents relativement proches.

Regardez ici. Parlons du polymorphisme — un autre outil très puissant de la POO . Il a quatre fonctionnalités.


2. L'héritage n'est pas une panacée

Imaginez que vous avez écrit une Cowclasse pour un jeu. Il a de nombreux domaines et méthodes. Les objets de cette classe peuvent faire diverses choses : marcher, manger et dormir. Les vaches portent également une cloche qui sonne lorsqu'elles marchent. Supposons que vous ayez tout implémenté dans la classe dans les moindres détails.

Et puis votre client vient et dit qu'elle veut sortir un nouveau niveau de jeu, dans lequel toute l'action se déroule en mer, et le personnage principal est une baleine.

Vous commencez à concevoir une Whaleclasse et réalisez qu'elle n'est que légèrement différente de la Cowclasse. La logique des deux classes est très similaire et vous décidez d'utiliser l'héritage.

Polymorphisme en Java

La Cowclasse est idéale pour jouer le rôle de la classe mère : elle possède toutes les variables et méthodes nécessaires. Tout ce que nous devons faire, c'est donner à la baleine la capacité de nager. Mais il y a un problème : votre baleine a des pattes, des cornes et une cloche. Après tout, cette fonctionnalité est implémentée à l'intérieur de la Cowclasse. Que peut-on faire ici ?

Polymorphisme en Java.  Héritage

3. Remplacer la méthode

Le dépassement de méthode vient à notre rescousse. Si nous avons hérité d'une méthode qui ne fait pas tout à fait ce que nous voulons dans notre nouvelle classe, nous pouvons remplacer cette méthode par une autre.

Remplacer la méthode

Comment est-ce fait? Dans notre classe descendante, nous déclarons la même méthode que la méthode de la classe parente que nous voulons surcharger. Nous y écrivons notre nouveau code. Et c'est tout — c'est comme si l'ancienne méthode de la classe parent n'existait tout simplement pas.

Voilà comment cela fonctionne:

Code Description
class Cow
{
   public void printColor ()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a cow");
   }
}

class Whale extends Cow
{
   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
  • Deux classes sont définies ici — CowetWhale
  • WhalehériteCow
  • La Whaleclasse remplace la printName()méthode
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Ce code affiche le texte suivant à l'écran :
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Ce code affiche ce qui suit à l'écran :
I'm a whale

Après avoir hérité de la Cowclasse et remplacé la printNameméthode, la Whaleclasse contient en fait les données et méthodes suivantes :

class Whale
{
   public void printColor()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
Nous ne connaissons aucune ancienne méthode.