Sobes.tech
Middle

O que são classes internas?

sobes.tech IA

Resposta da IA

Uma classe aninhada é uma classe definida dentro de outra classe.

Tipos de classes aninhadas em Java:

  • Classes aninhadas estáticas (Static Nested Classes):

    • Acessíveis a partir da classe externa sem sua instância.
    • Não têm acesso direto aos campos e métodos não estáticos da classe externa.
    • Declaradas com a palavra-chave static.
  • Classes internas (Inner Classes):

    • Classes internas membro (Member Inner Classes):
      • Declaradas ao nível dos membros da classe externa.
      • Têm acesso a todos os membros da classe externa (incluindo privados).
      • Requerem uma instância da classe externa para criar sua instância.
    • Classes internas locais (Local Inner Classes):
      • Definidas dentro de um método, construtor ou bloco de inicialização.
      • São visíveis apenas dentro desse método/bloco.
      • Têm acesso às variáveis locais finais ou efetivamente finais do contexto externo.
    • Classes internas anônimas (Anonymous Inner Classes):
      • Classes sem nome.
      • Usadas para criar objetos que implementam uma interface ou estendem uma classe imediatamente.
      • São definidas e instanciadas em uma única operação.

Exemplo de classe aninhada estática:

class OuterClass {
    private static String msg = "Hello from Outer";

    static class StaticNestedClass {
        public void display() {
            // Pode acessar membros estáticos da classe externa
            System.out.println(msg);
        }
    }
}
// Uso
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();

Exemplo de classe interna membro:

class OuterClass {
    private String msg = "Hello from Outer";

    class InnerClass {
        public void display() {
            // Pode acessar todos os membros da classe externa
            System.out.println(msg);
        }
    }
}
// Uso
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();

Vantagens do uso de classes aninhadas:

  • Agrupamento: Classes logicamente relacionadas podem ser agrupadas.
  • Encapsulamento: Classes internas podem acessar membros privados da classe externa, melhorando o encapsulamento.
  • Legibilidade e manutenção: Escondem classes auxiliares dentro da classe principal.
  • Eficiência: Podem ser usadas para criar estruturas de dados mais compactas e eficientes.