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

    Problemi con lo "Static Binding"

    Salve a tutti sono capi_1992 e mi sto avvicinando da poco a Java e alla programmazione OO. Il problema a cui spero diate risposta è il seguente: da quanto ho capito Java ha scelto la filosofia dello static binding e fin qui tutto chiaro (almeno credo). Il fatto è che in questo progettino d'esempio mi sembra che ci sia dynamic e non static. Sono confuso : .Il codice è il seguente:

    Classe Main:
    codice:
    package it.unitn.prog2;
    
    public class MySuperSweetPoint {
    
        public static void main(String[] args) {
    
            Point np = new NamedPoint(0, 0, "z");
    
            System.out.println(np);
        }
    }
    Classe Point:
    codice:
    package it.unitn.prog2;
    
    public class Point {
    
        int x;
        int y;
    
        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
        public void move(int dx, int dy) {
            x += dx;
            y += dy;
        }
    
        public String toString() {
            return ("(" + x + ", " + y + ")");
        }
    }
    Classe NamedPoint (IS-A Point):
    codice:
    package it.unitn.prog2;
    
    public class NamedPoint extends Point {
    
        String name;
    
        public NamedPoint(int x, int y, String name) {
            super(x, y);
            this.name = name;
        }
    
        public String toString() {
            return (name + "(" + x + ", " + y + ")");
        }
    }
    OUTPUT:
    z(0, 0)

    Non dovrebbe essere (0, 0)??

    Grazie in anticipo

  2. #2
    Java implementa tutti e 2 i tipi di binding.
    Lo static binding lo effettua il compilatore a compile time quando chiami un metodo che non è stato overridato da nessun'altra sottoclasse, oppure quando chiami una funzione statica della classe oppure un attributo.
    Il dynamic invece viene effettuato a runtime perchè il metodo che chiami è stato overridato.

    codice:
    Point p = new NamedPoint();
    p.toString(); // il compilatore non capisce quale metodo richiamare su questo oggetto, se Point.toString(), NamedPoint.toString() oppure Object.toString() quindi ci pensa la JVM a runtime
    codice:
    Point p = new Point();
    p.move(); // il compilatore effettua uno static binding perchè il metodo non è stato mai overridato e capisce che la funzione da richiamare è Point.move();
    lolide
    Java Programmer

    Informati

  3. #3
    Grazie, chiarissimo

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 © 2025 vBulletin Solutions, Inc. All rights reserved.