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