Middle
¿Cuáles son las diferencias entre clases anidadas (nested) y clases internas (inner) en Java?
sobes.tech AI
Respuesta de la IA
-
Clases anidadas (Nested classes): Miembros estáticos de la clase externa. No tienen acceso directo a los miembros no estáticos (campos y métodos) de la clase externa, solo a través de una instancia de la clase externa. Se declaran con la palabra clave
static. -
Clases internas (Inner classes): Miembros no estáticos de la clase externa. Tienen acceso completo a todos los miembros (estáticos y no estáticos) de la clase externa, incluyendo los privados. Para crear una instancia de una clase interna, se necesita una instancia de la clase externa. No usan la palabra clave
static.
Ejemplo:
// Clase externa
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Clase anidada estática
static class StaticNestedClass {
void display() {
// Acceso solo a miembros estáticos de la clase externa
System.out.println("Nested estático: " + staticOuterField);
// No hay acceso directo a outerField
// System.out.println(outerField); // Error de compilación
}
}
// Clase interna no estática
class InnerClass {
void display() {
// Acceso a todos los miembros de la clase externa
System.out.println("Interna: " + outerField);
System.out.println("Interna (estática): " + staticOuterField);
}
}
}
// Uso
public class Main {
public static void main(String[] args) {
// Crear instancia de clase anidada estática
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Crear instancia de clase interna requiere una instancia de la clase externa
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Característica | Clase anidada (Nested Class) | Clase interna (Inner Class) |
|---|---|---|
| Palabra clave | static |
No |
| Acceso a miembros de la clase externa | Solo estáticos | Todos |
| Requiere instancia de la clase externa para crear una instancia | No | Sí |
| Conexión con la instancia de la clase externa | No | Sí |