PDA

Visualizza la versione completa : [JAVA] Overloading dei metodi


Felixfree
09-06-2004, 11:57
Propongo questo semplice quesito: perchè quando eseguo il
programma riportato sotto la sequenza delle stampe e quindi
quella delle chiamata è così?

class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}

double distance(int x, int y) {
System.out.println("Chiamata a distance(int x, int y).");
int dx = this.x - x;
int dy = this.y - y;
return Math.sqrt(dx*dx+dy*dy);
}

double distance(Point p) {
System.out.println("Chiamata a distance(Point p).");
return distance(p.x, p.y);
}
}

class PointDist {
public static void main(String args[]){
Point p1 = new Point(0,0);
Point p2 = new Point(30,40);
System.out.println("Chiamo p1.distance(p2): " + p1.distance(p2));
System.out.println("Chiamo p1.distance(60,80): " + p1.distance(60,80));
}
}

/*

Per quale motivo tecnico la sequenza delle chiamate è così?
Io mi aspettavo per prime le stampe del tipo "Chiamo p1.distance....."

C:\java_source>java PointDist
Chiamata a distance(Point p).
Chiamata a distance(int x, int y).
Chiamo p1.distance(p2): 50.0
Chiamata a distance(int x, int y).
Chiamo p1.distance(60,80): 100.0

*/

Ringrazio chiunque mi spieghi il motivo tecnico di tutto ciò!

:sexpulp:

LeleFT
09-06-2004, 12:09
Quando tu richiami la funzione distance(Point p) essa al suo interno effettua una chiamata alla funzione che accetta 2 interi. Quindi la sequenza di chiamate è la seguente:


Point p = new Point(5, 6);
distance(p);

--------------

1) entro nella funzione distance(Point p)
2) entro nella funzione distance(int x, int y)

Alla fine, quando ho il risultato, posso completare l'istruzione System.out.println().


Ciao. :ciauz:

kateetak
09-06-2004, 12:20
Stavo per scrivere esattamente quello che ti ha già detto LeleFT

Felixfree
09-06-2004, 12:20
Quindi il comando System.out.println() prima di essere eseguito risolve completamente il suo argomento se ho ben capito.
Io non essendo pratico di Java e OOP credevo di veder stampato il commento tra virgolette dell'istruzione System.out.println() seguito dai commenti presenti nelle chiamate a distance!
Grazie.

:quipy:

LeleFT
09-06-2004, 12:24
No... il comportamento è identico anche nei linguaggi di programmazione procedurali, come il Pascal, C, Basic... prima di eseguire un'istruzione, vengono risolte tutte le espressioni in esso contenute, a partire da destra verso sinistra.


Ciao. :ciauz:

kateetak
09-06-2004, 12:38
Quello che pensavi di fare si ottine usando più istruzioni:



System.out.print("Chiamo p1.distance(p2): ");
System.out.println(p1.distance(p2));
System.out.print("Chiamo p1.distance(60,80): ");
System.out.println(p1.distance(60,80));

Felixfree
09-06-2004, 15:09
Ok, adesso tutto chiaro... a presto!

Ciao. :ciauz:

Loading