|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
[java] esercizio upcasting e downcasting
Scrivo ancora perchè non capisco proprio degli esercizi apparentemente elementari...uffaaaaa
data una classe concreta A estesa da due classi concrete B e C e dove C è estesa a sua volta dalla classe D: definite le seguenti variabili A a1, a2, a3, a4; B b; C c1, c2; D d; e istanziate così: a1 = new A() a2 = new B() a3 = new C() a4 = new D(); b = new B(); c1 = new C(), c2 = new D(); d = new D(); quali tra i seguenti assegnamenti sono validi? quali necessitano di casting e quali non sono validi comunque? b = a3 a1 = c1 a1 = b b = c2 d = c1 c2 = d c1 = a3 in particolare il secondo e il quarto assegnamento mi destano qualche perplessità... grazie mille! ![]()
__________________
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: 2776
|
Non so se ho interpretato bene il concetto di assegnazione valida o no. Io interpreto come non valido ciò che non funziona anche se potrebbe compilare.
Anche qui, seppure l'esercizio faccia intrecciare i neuroni, il concetto di base è semplice: - Tenere presente le relazioni "is a" - Per assegnare come riferimento a una sottoclasse il valore di un riferimento a una sovraclasse (esempio b=a) è necessario il casting, ma questo è valido solo se a conteneva effettivamente un B. b = a3 Si potrebbe fare con un cast solo se a3 fosse un'istanza di B, quindi quest'assegnazione non è comunque valida a1 = c1 Posso farlo senza cast perché c1 essendo dichiarato come un C è anche un A (relazione "is a") a1 = b Anche questo posso farlo per lo stesso motivo di prima b = c2 c2 non è sicuramente un B, quindi non posso farlo d = c1 c1 contiene un C, quindi non posso farlo, se contenesse un D potrei farlo con un cast c2 = d d è anche un C, quindi posso farlo c1 = a3 a3 contiene effettivamente un C, quindi posso farlo con un cast Spero di non aver detto caxxate ma a quest'ora sarebbe normale ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
intanto grazie mille per avere risposto a entrambi i miei post
![]()
__________________
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: Nov 2005
Messaggi: 2776
|
Ciao, per sicurezza ho provato:
Codice:
class A{} class B extends A{} class C extends A{} class Prova{ public static void main(String[] args){ A a; B b=new B(); C c=new C(); a=b; //b=c; } } |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
tranqui era la stessa prova che volevo fare io
![]() ![]()
__________________
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 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:31.