next up previous
Next: Héritage multiple Up: Héritage Previous: Auto-référencement: self

Référencement aux classes parentes: super

C'est la possibilité pour une classe d'invoquer une méthode de la classe parente. Cela est utile dans un contexte de redéfinition de la méthode invoquée (autrement, self est suffisant). En Ocaml, pour employer une méthode d'une super-classe, on doit nécessairement nommer cette dernière. Le but est d'identifier la classe d'origine de la méthode demandée, ce qui est justifié par l'ambigüité que peut entrainer l'héritage multiple. On donne un nom à la super-classe par la construction inherit C a1 ... an as nom_superclasse. Par la suite, toute utilisation de la méthode de la super-classe se fait par envoi de message via ce nom-là. La classe backupCell définit des cellules dont on garde une copie après modification. Elle re-définit la méthode set héritée de cell, et utilise via le nom super le code de cette méthode avant re-définition.

class backupCell =
 object
    inherit cell as super
    val mutable backup = 0
    method  set n = backup <- cont; super#set n;
    method print = print_string "Actual value: ";
                   super#print; print_newline();
                   print_string "Backup value: ";
                   print_int backup; print_newline()
    method restore = cont <- backup
end;;

let bc = new backupCell;;
val bc : backupCell = <obj>

 bc#set 1;;
- : unit = ()

 bc#print;;
Actual value: 1
Backup value: 0
- : unit = ()

 bc#restore;;
- : unit = ()

 bc#print;;
Actual value: 0
Backup value: 0
- : unit = ()



Maria-Viginia Aponte
2001-03-28