Sobes.tech
Middle

Cosa sono le classi annidate?

sobes.tech AI

Risposta dell'AI

Una classe annidata è una classe definita all’interno di un’altra classe.

Tipi di classi annidate in Java:

  • Classi annidate statiche (Static Nested Classes):

    • Accessibili dalla classe esterna senza la sua istanza.
    • Non hanno accesso diretto ai campi e metodi non statici della classe esterna.
    • Sono dichiarate con la parola chiave static.
  • Classi interne (Inner Classes):

    • Classi interne membro (Member Inner Classes):
      • Sono dichiarate a livello di membri della classe esterna.
      • Hanno accesso a tutti i membri della classe esterna (inclusi quelli privati).
      • Richiedono un’istanza della classe esterna per creare la loro istanza.
    • Classi interne locali (Local Inner Classes):
      • Sono definite all’interno di un metodo, costruttore o blocco di inizializzazione.
      • Sono visibili solo all’interno di quel metodo/blocco.
      • Hanno accesso alle variabili locali finali o effettivamente finali del contesto esterno.
    • Classi interne anonime (Anonymous Inner Classes):
      • Classi senza nome.
      • Sono usate per creare oggetti che implementano un’interfaccia o estendono una classe immediatamente.
      • Sono definite e istanziate in un’unica operazione.

Esempio di classe annidata statica:

class OuterClass {
    private static String msg = "Hello from Outer";

    static class StaticNestedClass {
        public void display() {
            // Può accedere ai membri statici della classe esterna
            System.out.println(msg);
        }
    }
}
// Uso
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();

Esempio di classe interna membro:

class OuterClass {
    private String msg = "Hello from Outer";

    class InnerClass {
        public void display() {
            // Può accedere a tutti i membri della classe esterna
            System.out.println(msg);
        }
    }
}
// Uso
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();

Vantaggi dell’uso di classi annidate:

  • Raggruppamento: Classi logicamente correlate possono essere raggruppate.
  • Incapsulamento: Le classi interne possono accedere ai membri privati della classe esterna, migliorando l’incapsulamento.
  • Leggibilità e manutenibilità: Nascondono le classi ausiliarie all’interno della classe principale.
  • Efficienza: Possono essere usate per creare strutture dati più compatte ed efficienti.