|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
[java] Problemi esercizio su polimorfismo e upcasting
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
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
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. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
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?)
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
mi autorispondo
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Sì, è così, perché un oggetto D è anche un C (relazione "is a")
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:02.



















