¿Cuál es la diferencia entre una clase interna (inner class) y una clase anidada estática (static nested class) en Java?
¡Hola a todos! Empecé a estudiar Java y me confundí con el tema de las clases anidadas. Leí la documentación de Oracle, pero es demasiado árida. Hay dos tipos: inner class (clase interna) y static nested class (clase anidada estática). Escribí un pequeño ejemplo, pero no entiendo por qué el código funciona de manera diferente.
Aquí está mi código:
```java
public class OuterClass {
private String outerField = "campo externo";
// Clase interna
class InnerClass {
void display() {
System.out.println("Inner: " + outerField);
}
}
// Clase anidada estática
static class StaticNestedClass {
void display() {
// ¡Error! No ve outerField
// System.out.println("StaticNested: " + outerField);
}
}
}
```
Preguntas:
1. ¿Por qué `StaticNestedClass` no puede acceder a `outerField` sin crear una instancia de la clase externa, mientras que `InnerClass` sí puede?
2. ¿Cuándo se debe usar `static` para una clase anidada y cuándo no?