PDA

View Full Version : [java] Problemi esercizio su polimorfismo e upcasting


Re_Kotc
30-06-2008, 17:32
Ciao a tutti, sto cercando invano di capire come svolgere un esercizio apparentemente molto semplice sul polimorfismo, solo che a quanto pare non devo averci capito molto!
Viene definita una superclasse A (non è astratta) estesa da due sottoclassi B e C, C a sua volta è estesa da una sottoclasse D.
A definisce i metodi f(double x);
f(double x, float y);

B definisce i metodi f(double x);
f(short x, string y);

C definisce i metodi f(int x);
f(string x);

D definisce i metodi f(short x);
f(string x);

poi definisce queste variabili

A a1, a2;
B b1;
C c1,c2;

e le istanzia così

a1 = new B(); a2 = new D();
b1 = new B();
c1 = new D();

e poi chiede nelle seguenti istruzioni quali metodi vengano effettivamente eseguiti, cioè a quale classe i metodi appartengano:

b1.f(3,4);
c1.f(3+"5");
a2.f(3);

sapete dirmi le risposte?...sopratt dell'ultima

wingman87
30-06-2008, 18:53
Per risolverlo devi ragionare così:
- Come hai dichiarato (non instanziato) il riferimento?
- La classe da cui proviene l'oggetto che invece hai instanziato fa l'override (rispetto al tipo di riferimento) dei metodi invocati?

Quindi in sostanza:

1) b1.f(3,4);
b1 è un riferimento a B ed effettivamente l'oggetto instanziato è di classe B, quindi il metodo richiamato è quello di B.

2) c1.f(3+"5");
c1 è un riferimento a C ma l'oggetto instanziato è di tipo D che fa l'override del metodo f(string x), quindi il metodo richiamato è quello definito in D.

3) a2.f(3);
a2 è un riferimento a A ma l'oggetto instanziato è di tipo D, tuttavia D non fa l'override di nessun metodo di A né tanto meno lo fa C che è la sua sovraclasse (di D), quindi il metodo richiamato è quello definito in A.

Re_Kotc
30-06-2008, 19:16
ottima spiegazione credo di aver capito....ma nel terzo caso se invece il metodo fosse stato sovrascritto in C ?, l'oggetto è un riferimento a A, ma è istanziato come D, in D non è stato sovrascritto il tale metodo, se però è stato sovrascritto in C allora va a utilizzare il metodo in C? (cioè risale la gerarchia?)

Re_Kotc
30-06-2008, 21:22
mi autorispondo :D....se ho capito come funziona...dovrebbe effettivamente usare il metodo in C...no?

wingman87
30-06-2008, 23:51
Sì, è così, perché un oggetto D è anche un C (relazione "is a")