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.
- Classes internas membro (Member Inner Classes):
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.