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.
- Classi interne membro (Member Inner Classes):
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.