|
ste182 |
[aiuto] ereditarietà |
15-01-2007 13:08 |
|
|
ste182 |
.arcimaestro.
Registered: Oct 2004
Posts: 258 (0.03 al dì)
Location:
Corso: informatica
Anno:
Time Online: 2 Days, 5:06:07: [...]
Status: Offline
Edit | Report | IP: Logged |
[aiuto] ereditarietà
ciao a tutti, non riesco a capire il concetto di extends in java.. dunque: ho capito che se estendo una classe A con un B nella B eredito i metodi e i campi della A.
faccio un esempio:
class A
{
int a =0;
public A(){
a = getCampo();
}
public int getCampo(){
return ++a;
}
}
class B extends A
{
int b=0;
public B()
{
b = getCampo();
}
}
se eseguo:
B obj = new B();
System.out.println("a = "+obj.a+" b = "+obj.b);
perchè stampa a=2 b=2 ?? quando costruisco a la incremento solo 1 volta quindi perchè esce 2?? help please
__________________
Live Fast, Die Fun
|
15-01-2007 13:08 |
|
|
| |
|
Smirne |
la prima istruzione del costruttore di ogni classe ... |
15-01-2007 14:27 |
|
|
Smirne |
.arcimaestro.
Registered: Feb 2003
Posts: 479 (0.06 al dì)
Location: Milano
Corso: Comunicazione Musicale
Anno: -6
Time Online: 2 Days, 22:50:10 [...]
Status: Offline
Edit | Report | IP: Logged |
la prima istruzione del costruttore di ogni classe è una chiamata al costruttore della classe superiore.
Quindi quando esegui B obj = new B();
viene eseguito prima il costruttore di A (che contiene getCampo(), e incrementa quindi a al valore 1).
viene eseguito poi il contenuto del codice del costruttore, ovvero la chiamata di getCampo() che incrementa la variabile a, (che quindi diviene 2) e ne assegna il valore a b (sempre 2).
(credo)
__________________
www.welld.ch
Sviluppo software tra Italia e Svizzera
|
15-01-2007 14:27 |
|
|
| |
|
ste182 |
ah ecco! ora mi è chiaro! non la sapevo sta cosa ... |
15-01-2007 14:37 |
|
|
ste182 |
.arcimaestro.
Registered: Oct 2004
Posts: 258 (0.03 al dì)
Location:
Corso: informatica
Anno:
Time Online: 2 Days, 5:06:07: [...]
Status: Offline
Edit | Report | IP: Logged |
ah ecco! ora mi è chiaro! non la sapevo sta cosa della chiamata al costruttore della superclasse... ora avrei un'altra domanda riferita stavolta alla ricorsione:
class Prova
{
public static int f(int a, int b)
{
if (b < 0 || a < b)
return 0;
if(a == b && b >= 0)
return 1;
return f(a-1,b) + f(a-1,b-1) +1;
}
}
chiamando il metodo f(2,0) mi ritorna 3... non capisco come mai...
1) 0<0 falso e 2<0 falso
2)2==0 falso
quindi si richiama di nuovo f però con (1,0)
1) 0<0 falso 1<0 falso
2)1==0 falso
a diventa quindi 0 e b pure
1)0<0 falso
2)0==0 && 0>=0 vero!
quindi ritorno 1 e la prima parte dell'espressione l'ho risolta giusto?
(sarebbe return 1 + f(a-1,b-1) + 1)
ora passo al secondo termine ovvero f(a-1,b-1); qui devo partire dai valori iniziali 2,0 oppure da 0,0?
__________________
Live Fast, Die Fun
|
15-01-2007 14:37 |
|
|
| |
|
Smirne |
primo passaggio:
... |
15-01-2007 15:20 |
|
|
Smirne |
.arcimaestro.
Registered: Feb 2003
Posts: 479 (0.06 al dì)
Location: Milano
Corso: Comunicazione Musicale
Anno: -6
Time Online: 2 Days, 22:50:10 [...]
Status: Offline
Edit | Report | IP: Logged |
primo passaggio:
1) 0<0 falso e 2<0 falso
2)2==0 falso
quindi devo ritornare f(1,0) + f(1,-1) + 1;
cominciamo a eseguire f (1,-1). Per la condizione 1) (b<0) il risultato è 1.
quindi aggiorniamo: f(2,0) = f(1,0) + 0 + 1;
calcoliamo il valore di f(1,0):
1) 1<0 falso 1<0 falso
2)1==0 falso
dovro' ritornare f(0,0) + f(0,-1) +1;
f(0,-1) = 0 (per b<0, condizione 1)
f(0,0) = 1 (0 == 0, 0 >= 0, condizione 2)
quindi f (1,0) = 1 + 0 + 1 = 2;
torniamo a f(2,0) = f(1,0) + 0 + 1;
esso sarà 3= 2 + 0 + 1;
spero si capisca..dimenticavi il +1 quando eseguivi f(1,0);
__________________
www.welld.ch
Sviluppo software tra Italia e Svizzera
Last edited by Smirne on 15-01-2007 at 15:22
|
15-01-2007 15:20 |
|
|
| |
|
ste182 |
ah ho capito! grazie mille!
... |
15-01-2007 16:01 |
|
|
ste182 |
.arcimaestro.
Registered: Oct 2004
Posts: 258 (0.03 al dì)
Location:
Corso: informatica
Anno:
Time Online: 2 Days, 5:06:07: [...]
Status: Offline
Edit | Report | IP: Logged |
ah ho capito! grazie mille!
sai che facevo io? scomponevo l'espressione in pezzi e li eseguivo uno alla volta... in pratica trovavo prima il valore di f con a=1 b=0 e mi veniva 1 poi il valore di f(-1,-1) che dava 0.. quindi facevo 1+1+0=2..... ahaha che stupido....
grazie ancora!
cmq più che programazione mi sembra di studiare matematica... ahahahahahaha
__________________
Live Fast, Die Fun
|
15-01-2007 16:01 |
|
|
| |
|
All times are GMT. The time now is 22:48. |
|
|
|
|
|
|
|
| |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|