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:
- Classe (pode ser abstrata ou concreta).
- 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');} };
- Uma classe é criada, mas seu nome é decidido pelo compilador, que estende a classe Person e fornece a implementação do método eat().
- É 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');} };
- Uma classe é criada, mas seu nome é decidido pelo compilador, que implementa a interface Eatable e fornece a implementação do método eat().
- É 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');} }