Sobes.tech
Junior — Middle

Qual é a diferença entre uma classe interna e uma classe aninhada na programação?

sobes.tech IA

Resposta da IA

Em Java (e no Android) uma classe aninhada é qualquer classe declarada dentro de outra classe. As classes aninhadas podem ser de dois tipos:

  1. Classe aninhada estática (static nested class) — declarada com o modificador static. Ela não tem acesso direto aos membros não estáticos da classe exterior.
  2. Classe interna (inner class) — classe aninhada sem o modificador static. Ela está vinculada a uma instância da classe exterior e tem acesso aos seus campos e métodos não estáticos.

Exemplo:

class Outer {
    private int outerField = 10;

    static class StaticNested {
        void print() {
            // Não é possível acessar outerField diretamente
            System.out.println("Classe aninhada estática");
        }
    }

    class Inner {
        void print() {
            // Pode acessar outerField
            System.out.println("Classe interna, outerField = " + outerField);
        }
    }
}

Portanto, a principal diferença é que a classe interna está vinculada a um objeto da classe exterior e pode acessar seus membros não estáticos, enquanto a classe aninhada estática não está.