Qual é a diferença entre inner class e static nested class em Java?
Olá a todos! Comecei a estudar Java e fiquei confuso sobre o tópico de classes aninhadas. Li a documentação da Oracle, mas é muito seca. Existem dois tipos: inner class e static nested class. Escrevi um pequeno exemplo, mas não entendo por que o código funciona de forma diferente.
Aqui está meu código:
```java
public class OuterClass {
private String outerField = "campo externo";
// Inner class
class InnerClass {
void display() {
System.out.println("Inner: " + outerField);
}
}
// Static nested class
static class StaticNestedClass {
void display() {
// Erro! Não vê outerField
// System.out.println("StaticNested: " + outerField);
}
}
}
```
Perguntas:
1. Por que `StaticNestedClass` não pode acessar `outerField` sem criar uma instância da classe externa, enquanto `InnerClass` pode?
2. Quando devo usar `static` para uma classe aninhada e quando não?