Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142

    richiamare valore var di superclassi

    ciao a tutti, un quesito.

    se io ho 3 classi A, B e C

    B è sottoclasse di C
    A è sottoclasse di B

    ogni classe definisce una var x e le assegna un valore.

    Come faccio partento da A a visualizzare in output il valore di x in A, B e C?

    spero di essere stato chiaro

    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: richiamare valore var di superclassi

    Originariamente inviato da atomico
    se io ho 3 classi A, B e C

    B è sottoclasse di C
    A è sottoclasse di B

    ogni classe definisce una var x e le assegna un valore.

    Come faccio partento da A a visualizzare in output il valore di x in A, B e C?
    Quindi le tre classi hanno un campo con lo stesso identico nome? Perfettamente possibile. In tal caso si parla di "hiding", ovvero la variabile 'x' della sottoclasse "nasconde" la variabile 'x' della superclasse.

    Nasconde nel senso che il solo uso del nome 'x' nella sottoclasse fa riferimento al campo nella classe e non a quello nella superclasse. Ma ovviamente i 3 campi esistono realmente nell'oggetto e sono differenti.

    Un campo "hidden" può comunque essere utilizzato usando o la parola chiave super o facendo un cast alla superclasse.

    codice:
    public class Prova
    {
        public static void main (String[] args)
        {
            C c = new C ();
    
            System.out.println (c.x);         // 30
    
            System.out.println (((B) c).x);   // 20
            System.out.println (((A) c).x);   // 10
        }
    }
    
    
    class A { int x = 10; }
    
    class B extends A { int x = 20; }
    
    class C extends B { int x = 30; }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    grazie mille x la risposta.. a primo occhio direi che hai capito benissimo e sembra proprio che hai centraot il punto.

    il problema è che mi da un errore:

    codice:
    c cannot be resolved.
    xchè?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da atomico
    il problema è che mi da un errore:

    codice:
    c cannot be resolved.
    Dipende cosa hai scritto .... posta magari il codice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    Codice PHP:
    public class extends {

      
    int x 3;

      public static 
    void main (String[] args) {

        
    A a = new A();

        
    a.test();

      }

     

      
    void test () {

        
    System.out.println(x); // stampa di x di A

        
        
    System.out.println(((B)a).x); // stampa di x di B

        
    System.out.println(super.x); // stampa di x di B (II modo)

        
    System.out.println(((Ca).x); // stampa di x di C

      
    }


    premeso che A è sottoclasse di B che è sottoclasse di C (il contrario di come avevi fatto ma np)
    (ovviamente poi c'è B e C scritti come scritti da te

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da atomico
    Codice PHP:
        System.out.println(((B)a).x); // stampa di x di B
        
    System.out.println(((Ca).x); // stampa di x di C 
    E che cosa è 'a' ???

    Comunque così è corretto:

    codice:
    public class Prova
    {
        public static void main (String[] args)
        {
            A a = new A ();
            a.test ();
        }
    }
    
    class C {
        int x = 10;
    }
    
    class B extends C {
        int x = 20;
    }
    
    class A extends B {
        int x = 30;
    
        public void test ()
        {
            System.out.println (x);              // 30
            System.out.println (super.x);        // 20
            System.out.println (((B) this).x);   // 20
            System.out.println (((C) this).x);   // 10
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    tu l'avevi scritto a... con this funziona. mi potresti spiegare

    ((B) this).x)

    cosa fa esattamente? x capire


    p.s. questa è una cosa che mi sono sempre chiesto... ma quello che hai scritto è sottointeso che bisogna dividere un file x classe.. o c'è un modo x mettere tutto in un file solo come hai fatto tE?

    xchè se io scrivo quello che dici il programma mi da errore dicendo che ogni classe ha bisogno del suo file..

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da atomico
    tu l'avevi scritto a...
    Scusa ma dove è che l'ho usato 'a'??

    Originariamente inviato da atomico
    ((B) this).x)

    cosa fa esattamente? x capire
    this è il riferimento all'oggetto "corrente", quello su cui è stato invocato il metodo di istanza (test() nell'esempio). Quindi si può benissimo farne un cast ad un supertipo.

    Originariamente inviato da atomico
    p.s. questa è una cosa che mi sono sempre chiesto... ma quello che hai scritto è sottointeso che bisogna dividere un file x classe.. o c'è un modo x mettere tutto in un file solo come hai fatto tE?

    xchè se io scrivo quello che dici il programma mi da errore dicendo che ogni classe ha bisogno del suo file..
    Un file sorgente .java può contenere tranquillamente più classi, ma con una piccola restrizione: solo una classe al massimo può essere marcata 'public'. E se c'è tale classe public, allora il nome del file deve corrispondere esattamente (salvo l'estensione, chiaramente) al nome della classe pubblica. Se non c'è una classe public, non c'è alcuna restrizione sul nome del file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    nel primo esempio che hai scritto hai messo "c" al posto di "this" (io ho usato a xchè avevi capito male la gerarchia).

    Per quanto riguarda il file.. PERFETTO finalmente ho capito

    Per quanto riguarda il cast.. non ho capito bene e nn trovo guide che lo spiegano bene.

    PEr esempio dalla guida di html io leggo:

    Il cast è un modo (utilizzato anche in altri linguaggi come il C ed il C++) per trasformare una variabile reference da un tipo di dato ad un altro. In tal modo è possibile dichiarare che un reference rappresenterà temporaneamente un tipo diverso da quello rappresentato in fase di compilazione. La sintassi utilizzata per effettuare il cast è la seguente:

    nuovo_tipo è il tipo di dato a cui si vuole convertire la variabile miavariabile. È importante sottolineare che l'operazione di cast è possibile a patto che i due tipi di dati (quello originario e quello di destinazione) siano compatibili tra loro.
    non capisco come lo hai utilizzato x questo scopo.. sempre che io abbia capito bene

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da atomico
    nel primo esempio che hai scritto hai messo "c" al posto di "this"
    Sì ma lì ero nel main() ed avevo una variabile 'c' di tipo C (la sottoclasse).
    Nel tuo esempio nel metodo test() non vedo una variabile 'a'.

    Originariamente inviato da atomico
    (io ho usato a xchè avevi capito male la gerarchia).
    No ... non avevo capito male ... ho solo fatto un "mio" esempio usando una "mia" sequenza dei nomi. Sperando che tu vedessi il concetto e non i nomi ...

    Originariamente inviato da atomico
    Per quanto riguarda il cast.. non ho capito bene e nn trovo guide che lo spiegano bene.

    Ho letto che il cast serve x variare il tipo delle var, ma non capisco come lo hai usato in questo caso ;(
    Il cast serve per poter "vedere" un oggetto come un altro tipo. Un up-cast di un reference è sempre ok e non causa mai problemi. Un down-cast di un reference invece è soggetto ad un controllo a runtime e può anche fallire (sempre a runtime).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.