| View previous topic :: View next topic |
| Author |
Message |
Corti Guest
|
Posted: Wed Jun 29, 2005 2:20 pm Post subject: poliformismo |
|
|
che differenza c'è tra queste due istruzioni:
A a1 = new A();
e
a1 = new B()
tenendo conto che A è una classe e B una sua estensione.
Grazie
Ciao Corti
|
|
| Back to top |
|
 |
b.mauro Guest
|
Posted: Wed Jun 29, 2005 2:44 pm Post subject: Re: poliformismo |
|
|
Corti wrote:
| Quote: | che differenza c'è tra queste due istruzioni:
A a1 = new A();
|
vengono eseguiti i metodi di A con l'implementazione di A
vengono eseguiti i metodi di A con l'implementazione di B
| Quote: | tenendo conto che A è una classe e B una sua estensione.
|
inoltre vengono eseguite le istruzioni definite nel costruttore.
ciao
--
mauro
|
|
| Back to top |
|
 |
Corti Guest
|
Posted: Wed Jun 29, 2005 3:10 pm Post subject: Re: poliformismo |
|
|
Scusa la mia ignoranza ma cosa intendi per implementazione??
Grazie e Ciao
Corti
"b.mauro" <b.mauroTOGLI (AT) MIvirgilio (DOT) it> ha scritto nel messaggio
news:42c2b1e5_1 (AT) newsgate (DOT) x-privat.org...
| Quote: | Corti wrote:
che differenza c'è tra queste due istruzioni:
A a1 = new A();
vengono eseguiti i metodi di A con l'implementazione di A
a1 = new B()
vengono eseguiti i metodi di A con l'implementazione di B
tenendo conto che A è una classe e B una sua estensione.
inoltre vengono eseguite le istruzioni definite nel costruttore.
ciao
--
mauro
|
|
|
| Back to top |
|
 |
b.mauro Guest
|
Posted: Wed Jun 29, 2005 4:01 pm Post subject: Re: poliformismo |
|
|
Corti wrote:
| Quote: | Scusa la mia ignoranza ma cosa intendi per implementazione??
|
per implementazine intendo il corpo del metodo.
--
mauro
|
|
| Back to top |
|
 |
Corti Guest
|
Posted: Wed Jun 29, 2005 4:33 pm Post subject: Re: poliformismo |
|
|
Con una dichiarazione di questo tipo:
class A { void take(long a){System.out.println("A");}}
class B extends A{ void take(int b) {System.out.println("B");}}
long l = 3L;
int i = 2;
e questo tipo di istruzioni:
1 --> A a1 = new A();
2 --> a1.take(i);
3 --> a1 = new B();
4 --> a1.take(i);
l'istruzione alla riga 2 ritorna la stringa "A"
mentre l'istruzione alla riga 4 cosa ritorna "A" o "B" ???
Oltre a dirmi quale è la risposta esatta mi potresti spiegare anche perchè??
Grazie e Ciao
Corti
"b.mauro" <b.mauroTOGLI (AT) MIvirgilio (DOT) it> ha scritto nel messaggio
news:42c2c405$1_1 (AT) newsgate (DOT) x-privat.org...
| Quote: | Corti wrote:
Scusa la mia ignoranza ma cosa intendi per implementazione??
per implementazine intendo il corpo del metodo.
--
mauro
|
|
|
| Back to top |
|
 |
Vincent Vega Guest
|
Posted: Wed Jun 29, 2005 4:50 pm Post subject: Re: poliformismo |
|
|
Corti wrote:
| Quote: | che differenza c'è tra queste due istruzioni:
A a1 = new A();
e
a1 = new B()
tenendo conto che A è una classe e B una sua estensione.
|
Che nel secondo caso a1 espone metodi e proprietà della classe A, ma
avranno un behaviour come implementato nella classe B.
Esempio pratico: se nella classe A c'è un metodo:
String getValue() {
return "Sono A";
}
e la classe B fa l'override del metodo:
String getValue() {
return "Sono B";
}
il risultato di a1.getValue() nel primo caso è "Sono A" mentre nel
secondo è "Sono B" (polimorfismo, appunto, poter assumere più "morfologie").
|
|
| Back to top |
|
 |
CarMas Guest
|
Posted: Thu Jun 30, 2005 8:08 am Post subject: Re: poliformismo |
|
|
Corti wrote:
| Quote: | class A { void take(long a){System.out.println("A");}}
class B extends A{ void take(int b) {System.out.println("B");}}
|
Devono avere la stessa signature!
Saluti
CarMas
|
|
| Back to top |
|
 |
Luca Li Greci Guest
|
Posted: Thu Jun 30, 2005 7:29 pm Post subject: Re: poliformismo |
|
|
Corti wrote:
| Quote: | Con una dichiarazione di questo tipo:
class A { void take(long a){System.out.println("A");}}
class B extends A{ void take(int b) {System.out.println("B");}}
Attenzione al tipo di parametro, perchè nella classe A take accetta un long |
e in B un int, quindi in questo caso non stai effettuando l'override del
metodo = nuova implementazione ma l'overload = sovraccarico di proprietà.
| Quote: | long l = 3L;
int i = 2;
e questo tipo di istruzioni:
1 --> A a1 = new A();
2 --> a1.take(i);
3 --> a1 = new B();
4 --> a1.take(i);
l'istruzione alla riga 2 ritorna la stringa "A"
mentre l'istruzione alla riga 4 cosa ritorna "A" o "B" ???
Viene stampato sempre e comunque A perchè in java esite la promozione |
implicita a tipo quindi un int viene promosso a long. Il metodo della classe
A accetta un long e il metodo della classe B è "solamente" un int.
per spiegarmi meglio, pensa alla classe B come fosse generata in questi
termini
class B {
void take(long a){System.out.println("A");} void take(int b)
{System.out.println("B");} }
per il concetto di promotion il metodo con signature int non viene "visto"
| Quote: |
Oltre a dirmi quale è la risposta esatta mi potresti spiegare anche
perchè??
Ok, la perplessità che venga stampato solo e sempre A puoi risolverla |
cambiando la firma del metodo della classe B da int a long.
Quando eseguirai lo stesso pezzo di codice che tu passi un int, che verrà
promosso a long, o direttamente un long avrai in output:
A
B
| Quote: |
Grazie e Ciao
Prego
Corti
Luca |
|
|
| Back to top |
|
 |
|