Redéfinition des méthodes

Dans une sous-classe, on peut changer le comportement des instances en redéfinissant les méthodes de la super-classe, ie. de la classe parente.

ruby> class Humain
   |   def identifie
   |     print "Je suis une personne.\n" 
   |   end
   |   def tarif_train(age)
   |     if age < 12
   |       print "Tarif réduit.\n";
   |     else
   |       print "Tarif normal.\n";
   |     end
   |   end
   | end
  nil
ruby> Humain.new.identifie
Je suis une personne.
  nil
ruby> class Etudiant1<Humain
   |   def identifie
   |     print "Je suis un étudiant.\n" 
   |   end
   | end
  nil
ruby> Etudiant1.new.identifie
Je suis un étudiant.
  nil

Supposons que nous voulions améliorer la méthode identifie de la super-classe plutôt que la remplacer complètement. Pour cela nous pouvons utiliser super.

ruby> class Etudiant2<Humain
   |   def identifie
   |     super
   |     print "Je suis aussi un étudiant.\n" 
   |   end
   | end
  nil
ruby> Etudiant2.new.identifie
Je suis un humain.
Je suis aussi un étudiant.
  nil

super nous permet de passer des arguments à la méthode originale. On dit quelquefois qu’il y a deux sortes de personnes…

ruby> class Malhonnete<Humain
   |   def tarif_train(age)
   |     super(11) # on veut un tarif réduit.
   |   end
   | end
  nil
ruby> Malhonnete.new.tarif_train(25)
Tarif réduit.
  nil
ruby> class Honnete<Humain
   |   def tarif_train(age)
   |     super(age) # passe l'argument reçu
   |   end
   | end
  nil
ruby> Honnete.new.tarif_train(25)
Tarif normal.
  nil

Guide de l’utilisateur

Précédent : GDU : Héritage Suivant : GDU : Contrôle d’accès