Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] Overloading dei metodi

    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:
    Il mondo è diviso in 10 gruppi di persone... chi capisce il binario e chi no!

    http://www.pratesi.net

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    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:
    codice:
    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Stavo per scrivere esattamente quello che ti ha già detto LeleFT

  4. #4

    OK

    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:
    Il mondo è diviso in 10 gruppi di persone... chi capisce il binario e chi no!

    http://www.pratesi.net

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Quello che pensavi di fare si ottine usando più istruzioni:

    codice:
    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));

  7. #7

    Grazie!

    Ok, adesso tutto chiaro... a presto!

    Ciao.
    Il mondo è diviso in 10 gruppi di persone... chi capisce il binario e chi no!

    http://www.pratesi.net

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.