Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    5

    Usare metodi di un oggetto contenuto in una variabile Object

    Salve a tutti
    Premettendo diavere una classe con all'interno una variabile di tipo Object chiamata ob1, assegnando a questa variabile un oggetto di classe diversa, è possibile in qualche modo usarne i metodi?

    Esempio
    codice:
    public class Componente {
    
       private Object ob1
       
       public Componente(Cerchio c) {
        ob1 = c;
       }
    
    }
    Ipotizzando che Componente non conosca la classe a cui appartenga c,è possibile per la classe Componente chiamare uno dei metodi dell'oggetto c? O c'è un modo per effettuare il casting senza conoscerne la classe?
    grazie in anticipo

  2. #2
    mi pare ti basti fare un casting all'oggetto originario

    se hai un oggetto Cerchio memorizzato in ob1 e vuoi richiamare il metodo di nome m1 della classe Cerchio devi scrivere così:
    ( (Cerchio) ob1).m1 ()

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    5
    Originariamente inviato da Kea Black
    mi pare ti basti fare un casting all'oggetto originario

    se hai un oggetto Cerchio memorizzato in un ob1 e vuoi richiamare il metodo di nome m1 della classe Cerchio devi scrivere così:
    ( (Cerchio) ob1).m1 ()
    Il mio problema è che ho diversi costruttori, quell'Object potrebbe contenere Cerchio, come Quadrato, Rettangolo, e cosi via, quindi non so come regolarmi col casting... non c'è un modo per "salvarsi" anche la classe di appartenenza dell'oggetto in modo da sapere quale casting fare?

  4. #4
    Originariamente inviato da dharlet
    Il mio problema è che ho diversi costruttori, quell'Object potrebbe contenere Cerchio, come Quadrato, Rettangolo, e cosi via, quindi non so come regolarmi col casting... non c'è un modo per "salvarsi" anche la classe di appartenenza dell'oggetto in modo da sapere quale casting fare?
    puoi usare instanceof per sapere a quale classe appartiene un oggetto

    codice:
    if (ob1 instanceof Cerchio)
    {
     ( (Cerchio) ob1).metodoCerchio ();
    }
    else if (ob1 instanceof Quadrato)
    {
     ( (Quadrato) ob1).metodoQuadrato ();
    }

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327
    E' un problema che si risolve con un corretto utilizzo della ereditarietà e del polimorfismo.

    Da un oggetto Object, di cui non conosci la classe originaria, più che usare l'operatore instanceof non puoi fare... e risulta parecchio scomodo (come puoi vedere dall'esempio nel post precedente).

    Ma se usi correttamente l'ereditarietà ed il polimorfismo ti accorgerai facilmente che puoi definire una classe generica (chiamata, ad esempio, "Oggetto") che fornisca dei metodi generici (dichiarati abstract) ed una serie di classi specifiche (Cerchio, Triangolo, Quadrato, CheSoIo) che implementano concretamente quei metodi... a questo punto risolvi la questione alla base, con raffinatezza:

    codice:
    public abstract class Oggetto {
       public abstract void metodo1();
       public abstract void metodo2();
    }
    
    public class Cerchio extends Oggetto {
       ...
       public void metodo1() { /* implementazione concreta */ }
       public void metodo2() { /* implementazione concreta */ }
    }
    
    public class Triangolo extends Oggetto {
       ...
       public void metodo1() { /* implementazione concreta */ }
       public void metodo2() { /* implementazione concreta */ }
    }
    
    ...
    Quindi:

    codice:
    public class Componente {
       private Oggetto obj;
       public Componente(Cerchio c) { obj = c; }
       public void usaComponente() {
          obj.metodo1();
          obj.metodo2();
       }
    }
    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
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    5
    Effettivamente risolve tutto alla grande
    Grazie per le vostre soluzioni

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.