Sobes.tech
Junior

Cosa sono le classi annidate?

sobes.tech AI

Risposta dell'AI

Le classi annidate sono classi dichiarate all’interno di un’altra classe. Si dividono in due tipi principali: classi annidate statiche (membri statici della classe) e classi interne (membri non statici).

Classi annidate statiche:

  • Sono associate alla classe esterna, non alla sua istanza.
  • Possono accedere solo ai membri statici della classe esterna.
  • Possono essere create senza un’istanza della classe esterna.

Classi interne:

  • Sono associate a un’istanza della classe esterna.
  • Possono accedere a tutti i membri della classe esterna (statici e non), inclusi i privati.
  • Richiedono un’istanza della classe esterna per essere create.

Esempi di utilizzo:

  • Raggruppamento: Le classi logicamente correlate possono essere raggruppate per migliorare la leggibilità e l’organizzazione del codice.
  • Incapsulamento: Le classi interne hanno accesso ai membri privati della classe esterna, consentendo di incapsulare i dettagli di implementazione.
  • Ascoltatori di eventi (Java): Spesso usati per creare classi interne anonime.
  • Classi ausiliarie: Piccole classi usate solo dalla classe esterna.
// Esempio di classe annidata statica
class OuterClass {
    static int outerStaticField = 1;
    int outerInstanceField = 2;

    static class StaticNestedClass {
        void display() {
            System.out.println("Campo statico esterno: " + outerStaticField);
            // Non si può accedere direttamente a outerInstanceField
        }
    }
}

// Esempio di classe interna
class AnotherOuterClass {
    int outerField = 10;

    class InnerClass {
        void display() {
            System.out.println("Campo esterno: " + outerField); // Accesso al campo della classe esterna
        }
    }
}

Tabella comparativa:

Caratteristica Classe annidata statica Classe interna
Relazione Con la classe esterna Con un’istanza della classe esterna
Accesso ai membri esterni Solo statici Tutti i membri (inclusi i privati)
Richiede istanza No
Può contenere membri statici No (eccetto costanti)