Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313

    [java] static & dynamic

    ciao.. ho questa roba:

    codice:
    package start;
    public class Start {
    A f1;
    B f2;
    C f3;
    public Start() {
    f1 = new A();
    f2 = new B();
    f3 = new C();
    f1.message();
    f1=f2;
    f1.message();
    f1=f3;
    f1.message();
    f2.message_from_a();
    f3.message();}
    public static void main(String args[]) {
    new Start();}
    }
    class A {
    void message() {
    System.out.print("A ");}
    }
    class B extends A {
    void message() {
    System.out.print("B ");}
    void message_from_a() {
    super.message();}
    }
    class C extends A {
    void message() {
    System.out.print("C ");}
    }
    devo spiegare cosa stampa (ABCAC) parlando di static type e dynamic type... che posso dire? sono alle prime armi!
    alcool: la causa e la soluzione di tutti i problemi

  2. #2
    Miiii... A quest'ora?!?
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    eh lo so.. ma devo ridarlo domani mattina il compito
    !
    alcool: la causa e la soluzione di tutti i problemi

  4. #4
    codice:
    f1 = new A();
    f2 = new B();
    f3 = new C();
    f1.message();
    E fin qui, f1 e' di classe A e punta a un oggetto di classe A. Quindi stampa A.

    codice:
    f1=f2;
    f1.message();
    Ora f1 (di classe A, che credo sia quello che chiami static type) punta a f2, oggetto di classe B (che dovrebbe essere quello che chiami dynamic type) per cui sara' eseguito il metodo message della classe B, stampando B.
    Questo e' quello che si chiama binding dinamico: nonostante f1 sia di tipo A, e' stato richiamato il metodo della classe B.

    codice:
    f1=f3;
    f1.message();
    Per lo stesso motivo qua viene stampato C.

    codice:
    f2.message_from_a();
    Questo metodo richiama il metodo message della superclasse. Siccome f2 punta a un oggetto di classe B e la superclasse di B e' A, sara' eseguito il metodo message() della classe A, stampando A.

    codice:
    f3.message();}
    Questo stampa C, ovviamente.

    P.S. Lo static type e' un concetto che, credo, derivi dal C++ ma ha poco senso applicato a Java, dove viene usato piu' che altro dal compilatore per il type checking.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  5. #5
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    grazie mille!!! sei stato prezioso!!!
    alcool: la causa e la soluzione di tutti i problemi

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.