Ecco un esempio. Supponiamo di avere 2 classi:
class A {
public String getName() {
return "A";
}
}
class B extends A {
public String getName() {
return "B";
}
}
Se ora effettuare le seguenti operazioni:
public static void main(String[] args) {
A myA = new B();
System.out.println(myA.getName());
}
otteniamo il risultato
B
Se Java non ha avuto virtual method invocation
, sarebbe determinare a compila il tempo che il getName()
da chiamare è quello che appartiene alla classe A
. Poiché non lo fa, ma lo determina in fase di esecuzione a seconda della classe effettiva a cui punta myA
, otteniamo il risultato sopra riportato.
[EDIT per aggiungere (un po 'forzata) esempio]
È possibile utilizzare questa funzione per scrivere un metodo che accetta un numero qualsiasi di Object
s come argomento e li stampa in questo modo:
public void printObjects(Object... objects) {
for (Object o: objects) {
System.out.println(o.toString());
}
}
Questo funzionerà per qualsiasi mix di oggetti. Se Java non disponeva di virtual method invocation
, tutti gli Oggetti verrebbero stampati utilizzando l'Object toString()
che non è molto leggibile. Ora, invece, verrà utilizzato il toString()
di ogni classe effettiva, il che significa che la stampa di solito sarà molto più leggibile.
"scenario in tempo reale" fa * non * significa ciò che pensi che significhi. Quello che ti interessa è uno "scenario del mondo reale". –
Senza questo concetto non avresti l'unica caratteristica che rende interessante il modello OOP di Java: il polimorfismo. –
vedere qui: http://stackoverflow.com/questions/2486160/java-virtual-methods – Tomer