Dipende dalla lingua che stai usando (e talvolta da come sono dichiarati i metodi).
Ci sono essenzialmente due modi per l'implementazione di eseguire chiamate di metodo: invio statico e invio dinamico.
In dispatch statico , il compilatore determina esattamente al momento della compilazione quale metodo chiamare, senza prendere in considerazione la possibilità che possa esistere una sottoclasse che sovrascrive il metodo.
Con l'invio statico, l'output sarebbe
In SuperClass.bar
In SuperClass.foo
In dispatch dinamico , il compilatore fa prende in considerazione che una sottoclasse potrebbe sovrascrivere il metodo, quindi imposta cosa che l'ambiente runtime può chiamare metodo giusto nella super classe o nella sottoclasse.
Con l'invio dinamico, l'output sarebbe
In SuperClass.bar
In SubClass.foo
Quale metodo di invio viene usato dipende dalla lingua che si usa, da come sono dichiarati i metodi e da come si esegue la chiamata.
In C ++ e C #, il compilatore utilizza l'invio statico per impostazione predefinita, a meno che il metodo non sia stato dichiarato come virtual
.
In Java, il compilatore utilizza l'invio dinamico per impostazione predefinita.