Em Java, uma classe pode ser definida dentro de outra classe?

0
136

Sim, em Java, uma classe pode ser definida dentro de outra classe. Essas classes são conhecidas como classes internas ou classes aninhadas.

Existem quatro tipos principais de classes internas em Java:

☕ Classe Interna Regular (Inner Class)

É uma classe definida dentro de outra classe. Ela pode ter acesso aos membros da classe externa, incluindo campos privados. As classes internas são frequentemente usadas quando a classe interna tem uma relação forte com a classe externa.

Neste exemplo, temos uma classe Carro com uma classe interna Motor:

☕ Classe Anônima (Anonymous Class)

Classe anônima (Anonymous Class) é um conceito em Java que permite criar uma classe sem nome (ou seja, sem declarar explicitamente um nome de classe) e instanciá-la ao mesmo tempo, geralmente para fornecer uma implementação rápida e ad hoc de uma interface ou classe abstrata. Isso é útil quando você precisa criar uma classe que será usada apenas uma vez e não deseja criar uma classe separada para ela.

A designação “anônima” refere-se ao fato de que, ao escrever o código, você não precisa escolher um nome para essa classe, porque o compilador cuida disso internamente.

Neste exemplo, usamos uma classe anônima para criar uma implementação rápida de uma interface:

☕ Classe Estática Aninhada (Static Nested Class)

É uma classe interna que é declarada como estática. Isso significa que ela não tem acesso direto aos membros não estáticos da classe externa. As classes estáticas aninhadas são frequentemente usadas para melhorar a organização do código.

Exemplo:

☕ Classe Interna Local (Local Inner Class)

É uma classe definida dentro de um método ou bloco de código. Ela só é visível dentro do escopo onde foi definida.

Neste exemplo, temos uma classe interna local definida dentro de um método:

📅 Tabela Comparativa de Tipos de Classes Internas em Java

Tipo de Classe Interna Visibilidade a membros da Classe Externa Necessidade de Instância da Classe Externa Aplicação Comum
Classe Interna Regular Sim Sim Relações fortes entre a Classe Externa e a Classe Interna, como Listeners e Comportamentos específicos.
Classe Anônima Não Não Implementações ad hoc de interfaces e classes abstratas.
Classe Estática Aninhada Sim Não Melhorar a organização de código, quando a classe interna não precisa de acesso aos membros não estáticos da Classe Externa.
Classe Interna Local Sim Sim Encapsular funcionalidades específicas de um método ou bloco de código.

*Atualizado em 30 de setembro de 2023

Estude a Bíblia!
guest
0 Comentários
Inline Feedbacks
View all comments