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
Précédent : GDU : Héritage Suivant : GDU : Contrôle d’accès

