Middle
Qual è la differenza tra classi annidate (nested) e classi interne (inner) in Java?
sobes.tech AI
Risposta dell'AI
-
Classi annidate (Nested classes): Membri statici della classe esterna. Non hanno accesso diretto ai membri non statici (campi e metodi) della classe esterna, solo tramite un'istanza della classe esterna. Sono dichiarate con la parola chiave
static. -
Classi interne (Inner classes): Membri non statici della classe esterna. Hanno accesso completo a tutti i membri (statici e non statici) della classe esterna, inclusi quelli privati. Per creare un'istanza di una classe interna, è necessaria un'istanza della classe esterna. Non usano la parola chiave
static.
Esempio:
// Classe esterna
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Classe annidata statica
static class StaticNestedClass {
void display() {
// Accesso solo ai membri statici della classe esterna
System.out.println("Nested statico: " + staticOuterField);
// Nessun accesso diretto a outerField
// System.out.println(outerField); // Errore di compilazione
}
}
// Classe interna non statica
class InnerClass {
void display() {
// Accesso a tutti i membri della classe esterna
System.out.println("Interna: " + outerField);
System.out.println("Interna (statica): " + staticOuterField);
}
}
}
// Utilizzo
public class Main {
public static void main(String[] args) {
// Creazione di un'istanza della classe annidata statica
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Creazione di un'istanza della classe interna richiede un'istanza della classe esterna
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Caratteristica | Classe annidata (Nested Class) | Classe interna (Inner Class) |
|---|---|---|
| Parola chiave | static |
No |
| Accesso ai membri della classe esterna | Solo statici | Tutti |
| Richiede un'istanza della classe esterna per creare un'istanza | No | Sì |
| Connessione con l'istanza della classe esterna | No | Sì |