Newsgroup: it.comp.java
Titolo: Costruttori misteriosi!

Ciao a tutti , stò studiando java dal libro JAVA 1.2 GUIDA COMPLETA -Apogeo-
e mi sono bloccato su un esempio che il libro fà riguardo al caso in cui un
metodo costruttore ne richiama un altro.
In particolare riferendosi al programma MioRett (descritto in basso) si
afferma nel libro quanto segue:
" ...Quando si hanno diversi metodi che svolgono compiti, si può considerare
la scorciatoia di utilizzare un metodo per richiamarne un altro. Ad esempio
il metodo creaRett() alle righe 17-23 può essere sostituito con il seguente,
più conciso:
 MioRett creaRett(Point supSin, Point infDes) {
       return creaRett(supSin.x, infDes.y, infDes.x, infDes.y);
    }
In questo metodo, l'istruzione return richiama il metodo craeRett() alle
righe 9-15 con quattro argomenti interi.I risultati sono gli stessi, con un
minor numero di righe di codice."
Io ho provato a compilare il programma sia nel modo normale sia inserendo
tale variazione ed in entrambe le occasioni il programma è stato compilato
con successo.Quello che però non sono riuscito a capire e che qualcuno di
voi mi auguro potrà spiegarmi meglio è perchè sono questi gli argomenti
(supSin.x, infDes.y, infDes.x, infDes.y) inseriti nella linea di codice
return creaRett(supSin.x, infDes.y, infDes.x, infDes.y) e non questi int x1,
int y1, int x2, int y2  visto che il metodo che si richiama alle righe 9-15
è formato da questi?
Spero di essere stato chiaro e mi auguro che qualcuno mi "sblocchi".
Grazie a tutti
 Nicola
Ecco il codice:
 1   import java.awt.Point;
 2
 3   class MioRett {
 4   int x1 = 0;
 5   int y1 = 0;
 6   int x2 = 0;
 7   int y2 = 0;
 8
 9         MioRett creaRett(int x1, int y1, int x2, int y2) {
 10       this.x1 = x1;
 11       this.y1 = y1;
 12       this.x2 = x2;
 13       this.y2 = y2;
 14       return this;
 15      }
 16
 17      MioRett creaRett(Point supSin, Point infDes) {
 18      x1 = supSin.x;
 19      y1 = supSin.y;
 20      x2 = infDes.x;
 21      y2 = infDes.y;
 22       return this;
23       }
24
25        MioRett creaRett(Point supSin, int l, int a) {
26        x1 = supSin.x;
27        y1 = supSin.y;
28        x2 = (x1 + l);
29        y2 = (y1 + a);
30        return this;
31         }
32
33        void stampaRett(){
34        System.out.print("MioRett: <" + x1 + ", " + y1);
35        System.out.println(", " + x2 + ", " + y2 + ">");
36        }
37
38         public static void main(String arguments[]) {
39        MioRett rett= new MioRett();
40
41        System.out.println("Chiamata di creaRett con coordinate 25,25,
50,50:");
42        rett.creaRett(25, 25, 50, 50);
43        rett.stampaRett();
44        System.out.println("***");
45
46       System.out.println("Chiamata di creaRett con punti(10,10),
(20,20):");
47        rett.creaRett(new Point(10,10), new Point(20,20));
48        rett.stampaRett();
49        System.out.println("***");
50
51        System.out.print("Chiamata di creaRett con 1 punto (10,10),");
52        System.out.println(" larghezza (50) e  altezza (50):");
53
54        rett.creaRett(new Point(10,10), 50, 50);
55        rett.stampaRett();
56        System.out.println("***");
57            }
58        }

è formato da questi?
vorresti scrivere una cosa tipo :
MioRett creaRett(Point supSin, Point infDes) 
{
       return creaRett(x1, y1, x2, y2);
}
?
http://digilander.iol.it/schiele
http://jame.sourceforge.net

 ha scritto nel
messaggio news:3b287ca...@news.tiscalinet.it...


      }
non ha senso :)
return creaRett(x1,y1,x2,y2);
senza int, non e' una dichiarazione!
* return restituisce il valore ritornato da creaRett
* creaRett imposta le variabili globali x1,y1,x2,y2
dato che i valori da assegnare alle variabili globali
sono contenuti negli oggetti Point devi chiamare 
creaRect come nel codice originale
MioRett creaRett(Point supSin, Point infDes) 
{
      return creaRett(supSin.x, infDes.y, infDes.x, infDes.y);
}
oppure imposti direttamente le variabili globali 
MioRett creaRett(Point supSin, Point infDes) 
{
    x1 = supSin.x;
    y1 = supSin.y;
    x2 = infDes.x;
    y2 = infDes.y;
    return this;
}
in questo modo non riusi il codice gia' scritto 
MioRett creaRett(int x1, int y1, int x2, int y2) 
{
      this.x1 = x1;
      this.y1 = y1;
      this.x2 = x2;
      this.y2 = y2;
      return this;
}
considera che creaRett(int x1, int y1, int x2, int y2) e 
creaRett(Point supSin, Point infDes) sono due funzioni 
diverse, hanno lo stesso non ma argomenti diversi!
e' forse questo che ti confonde?
ciao_O
http://digilander.iol.it/schiele
http://jame.sourceforge.net

      }
dimenticavo di dire che creaRett non e' un costruttore
sarebbe un costruttore se si chiamasse MioRett 
(il tipo di ritorno e' implicitamente un oggetto MioRett)
public MioRett(Point supSin, Point infDes)
{
	x1 = supSin.x;
	y1 = supSin.y;
	x2 = supSin.x;
	y2 = supSin.y;
	//non serve return
