Méthodes virtuelles et attributs

En URBI, toutes les méthodes (fonctions de classe) et tous les attributs (variables de classe) sont virtuels, ce qui signifie que si votre classe le redéfinit, il devient sa propre définition, autrement la définition (ou la valeur) de la classe-mère sera utilisée.

Considérons l'exemple suivant:

class maclasse {
  var x;
  function f();
};
function maclasse.f() {
  echo "Je suis dans maclasse";
};

D'où:

sous = new maclasse;
sous.f();
[139464:notag] *** Je suis dans maclasse

La définition de f est récupérée depuis maclasse. Nous pouvons maintenant la redéfinir:

function sous.f() {
  echo "Je suis dans sous!";
};

Observons la différence:

sous.f();
[139464:notag] *** Je suis dans sous!

De la même façon, les attributs obtiennent leur valeur de la classe-mère, à moins qu'ils soient redéfinis dans la classe-fille. L'exemple suivant illustre ce cas avec la classe précédente maclasse et les prototypes de sous:

maclasse.x = 1;
sous.x;
[146711:notag] 1.000000
sous.x = 4;
sous.x;
[146711:notag] 4.000000
maclasse.x;
[146711:notag] 1.000000