Sobes.tech
Junior

O que são classes aninhadas?

sobes.tech IA

Resposta da IA

As classes aninhadas são classes declaradas dentro de outra classe. Elas dividem-se em dois tipos principais: classes aninhadas estáticas (membros estáticos da classe) e classes internas (membros não estáticos).

Classes aninhadas estáticas:

  • Estão relacionadas com a classe externa, não com a sua instância.
  • Podem aceder apenas aos membros estáticos da classe externa.
  • Podem ser criadas sem uma instância da classe externa.

Classes internas:

  • Estão relacionadas com uma instância da classe externa.
  • Podem aceder a todos os membros da classe externa (estáticos e não estáticos), incluindo privados.
  • Requerem uma instância da classe externa para serem criadas.

Exemplos de uso:

  • Agrupamento: Classes logicamente relacionadas podem ser agrupadas para melhorar a legibilidade e organização do código.
  • Encapsulamento: As classes internas têm acesso aos membros privados da classe externa, permitindo encapsular detalhes de implementação.
  • Ouvintes de eventos (Java): Frequentemente usados para criar classes internas anónimas.
  • Classes auxiliares: Pequenas classes usadas apenas pela classe externa.
// Exemplo de classe aninhada estática
class OuterClass {
    static int outerStaticField = 1;
    int outerInstanceField = 2;

    static class StaticNestedClass {
        void display() {
            System.out.println("Campo estático externo: " + outerStaticField);
            // Não é possível aceder diretamente a outerInstanceField
        }
    }
}

// Exemplo de classe interna
class AnotherOuterClass {
    int outerField = 10;

    class InnerClass {
        void display() {
            System.out.println("Campo externo: " + outerField); // Acesso ao campo da classe externa
        }
    }
}

Tabela comparativa:

Característica Classe aninhada estática Classe interna
Relação Com a classe externa Com uma instância da classe externa
Acesso aos membros externos Apenas estáticos Todos os membros (incluindo privados)
Requer instância Não Sim
Pode conter membros estáticos Sim Não (exceto constantes)