La classe compte contient une variable avec le solde d'un compte, et des méthodes pour consulter le solde, pour virer et pour retirer de l'argent.
class compte s_init = object val mutable solde = s_init method depot n = solde <- solde + n method retrait n = solde <- solde - n method donne_solde = solde method affiche_solde = begin print_string"Votre solde est: "; print_int solde; print_newline () end end;; class compte : int -> object val mutable solde : int method affiche_solde : unit -> unit method depot : int -> unit method donne_solde : int method retrait : int -> unit end
La syntaxe de l'héritage est: inherit
[as nom2 ], où nom1 est le nom de la classe dont on veut
hériter
et
sont ses arguments d'initialisation.
L'annotation optionnelle as nom2 est détaillée dans les
parties suivantes.
La classe compteremunere est une sous-classe
de compte. Elle hérite de tous les attributs de compte,
et les étend par la définition de deux nouvelles variables
taux et interets, et d'une nouvelle méthode
ajoute_interets.
class compteremunere s_init = object inherit compte s_init val taux = 5 (* Donne en % *) val mutable interets = 0 method ajout_interets = begin interets <- (solde*taux)/100; solde <- solde + interets end end;;
compteremunere possède toutes les variables et méthodes de sa classe parente. Ceci se reflète dans l'interface inférée par le typeur:
class compteremunere : int -> object val mutable interets : int val mutable solde : int val taux : int method affiche_solde : unit method ajout_interets : unit method depot : int -> unit method donne_solde : int method retrait : int -> unit end
On peut utiliser toutes les méthodes, qu'elles soient nouvelles ou héritées:
# let dupont = new compteremunere 200;; val dupont : compteremunere = <obj> # dupont#depot(1000);; - : unit = () # dupont#ajout_interets;; - : unit = () # dupont#affiche_solde;; Votre solde est: 1260 - : unit = ()