Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479

    Classe interne statiche e non

    Ciao a tutti,
    stavo leggendo su un libro le classi interne statiche e quelle non statiche ma.. non riesco veramente a capire la differenza. Sto vedendo che si comportano nello stesso modo, quindi, dove sta la differenza?

    In genere un membro statico è associato alla classe e non all'istanza. Quindi per le classi statiche dove sta la differenza?
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    68
    Considera questo codice:
    codice:
    class A {
        //...
        class B {}
    }
    La classe B ha la proprietà di potersi riferire agli alla classe in cui è stata definita grazie al fatto che possiede un reference alla stessa. Tuttavia se dichiari la classe B come static impedisci questo vincolo. Nei manuali in inglese le classi interne sono definite "inner class", mentre quando sono static prendono il nome di "nested class", questo nel caso volessi cercare maggiori dettagli in merito.

    Riassumendo una "nested class" ha le seguenti proprietà:
    1. Non hai bisogno della classe esterna per creare un istanza della nested class.
    2. Non puoi accedere ad una non-static classe esterna dalla nested class

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da M@P
    2. Non puoi accedere ad una non-static classe esterna dalla nested class
    Solo una piccola precisazione, perché questo punto non mi pare molto chiaro.

    codice:
    class A {
        static class B {
        }
    }
    Una "nested" (static) class B:
    - può accedere direttamente ai membri static (anche quelli private) della classe "contenitore" A.
    - può accedere direttamente ai membri di istanza (anche quelli private) della classe contenitore A a patto di avere un reference alla istanza di A.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    grazie mille :-)
    ora resta da capire quando conviene usare una e quando l'altra!
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Poker1
    ora resta da capire quando conviene usare una e quando l'altra!
    Le inner class (non static) hanno la peculiarità di avere una "relazione" particolare con la classe contenitore. Una istanza della inner class è associata ad una istanza della classe contenitore. Questo fornisce alla inner class dei privilegi, che consistono nel fatto che può usare tutti i membri di istanza, anche private della classe contenitore perché sono in effetti "in scope".

    Quindi una inner class la si usa quando si deve sfruttare questa relazione particolare ed usare la istanza della classe contenitore o i suoi membri di istanza.

    Le nested class (static) sono normali classi che sono inglobate in un'altra, come se fosse un "namespace". Non c'è alcuna "relazione" particolare. Invece di avere solo Pippo la classe si chiama Contenitore.Pippo. Alla fine è solo una questione "strutturale".

    P.S. esistono dei casi in cui una inner class non ha associata una classe contenitore ... pur restando comunque "inner".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    68
    Originariamente inviato da andbin
    P.S. esistono dei casi in cui una inner class non ha associata una classe contenitore ... pur restando comunque "inner".
    Interessante, sai farmi mica un esempio?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da M@P
    Interessante, sai farmi mica un esempio?
    Le inner class sono di 3 tipi: "regular" (dichiarate come membro della classe contenitore, dette così giusto solo per distinguerle dalle altre 2), "anonymous" e "local".

    Le anonymous e local potrebbe essere dichiarate in un contesto "static", metodo static o init-block static e per le anonymous la istanza potrebbe essere assegnata ad un campo static.
    In questi casi sono comunque dette "inner" ma non c'è ovviamente una istanza "contenitore".
    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.