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