logo

Classe interna Java anônima

A classe interna anônima Java é uma classe interna sem nome e para a qual apenas um único objeto é criado. Uma classe interna anônima pode ser útil ao criar uma instância de um objeto com certos 'extras', como sobrecarregar métodos de uma classe ou interface, sem precisar realmente subclassificar uma classe.

Em palavras simples, uma classe que não tem nome é conhecida como classe interna anônima em Java. Deve ser usado se você precisar substituir um método de classe ou interface. A classe interna Java Anonymous pode ser criada de duas maneiras:

  1. Classe (pode ser abstrata ou concreta).
  2. Interface

Exemplo de classe interna anônima Java usando classe

TestAnonymousInner.java

 abstract class Person{ abstract void eat(); } class TestAnonymousInner{ public static void main(String args[]){ Person p=new Person(){ void eat(){System.out.println('nice fruits');} }; p.eat(); } } 
Teste agora

Saída:

 nice fruits 

Funcionamento interno de determinado código

 Person p=new Person(){ void eat(){System.out.println('nice fruits');} }; 
  1. Uma classe é criada, mas seu nome é decidido pelo compilador, que estende a classe Person e fornece a implementação do método eat().
  2. É criado um objeto da classe Anonymous referido por 'p', uma variável de referência do tipo Person.

Classe interna gerada pelo compilador

 import java.io.PrintStream; static class TestAnonymousInner$1 extends Person { TestAnonymousInner$1(){} void eat() { System.out.println('nice fruits'); } } 

Exemplo de classe interna anônima Java usando interface

 interface Eatable{ void eat(); } class TestAnnonymousInner1{ public static void main(String args[]){ Eatable e=new Eatable(){ public void eat(){System.out.println('nice fruits');} }; e.eat(); } } 
Teste agora

Saída:

 nice fruits 

Funcionamento interno de determinado código

Ele executa duas tarefas principais por trás deste código:

 Eatable p=new Eatable(){ void eat(){System.out.println('nice fruits');} }; 
  1. Uma classe é criada, mas seu nome é decidido pelo compilador, que implementa a interface Eatable e fornece a implementação do método eat().
  2. É criado um objeto da classe Anonymous que é referido por 'p', uma variável de referência do tipo Eatable.

Classe interna gerada pelo compilador

 import java.io.PrintStream; static class TestAnonymousInner1$1 implements Eatable { TestAnonymousInner1$1(){} void eat(){System.out.println('nice fruits');} }