Classes Aninhadas

Aula
Estado
💡
São utilizadas para limitar o escopo onde a classe aninhada pode ser utilizada
  • O tipo da classe altera o contexto onde ela é usada:
    • se for static estará no contexto estático da classe-pai
    • se for membro (não-estática) da classe-pai, estará associada com as instâncias da classe-pai
    • se estiver dentro de um método, estará associada ao contexto do método
  • Classes aninhadas public, protected e default são visíveis por classes externas; classes private, não
 
Exemplo de classe dentro de um método
Exemplo de classe dentro de um método

Anonymous Inner Classes

💡
Recomendada quando é preciso substituir ou estender poucos comportamentos de uma classe
  • É a implementação de uma interface ou extensão de uma classe, sem a necessidade de declarar uma classe comum
    • como uma classe aninhada anônima gera instância no momento da declaração, é possível implementar uma interface
    • public interface Order {...} Order order = new Order() { // implementação dos métodos ... }
  • É implementada em linha e retorna uma instância no momento da declaração
  • Métodos, variáveis e parâmetros fora do seu escopo próprio são acessíveis apenas se forem final ou effective final
Classe Order
Classe Order
Implementação em linha de uma classe que estende Order
Implementação em linha de uma classe que estende Order