Opa Ley, tudo bem?
Então, nós não podemos dar new
em uma interface, pois os metodos não possuem corpo, afinal é tudo abstrato, o correto é sempre criar uma implementação daquela interface. Entendido isso, o java nos auxilia a não precisar criar um arquivo, criando essas classes anônimas, como o proprio nome já diz, você está instânciando uma classe a partir daquela interface.
Por exemplo:
Runnable r = new Runnable(); // Esse código não rola
Agora um caso que funciona:
Runnable r = new Runnable() {
public void run() {
System.out.println("Eai Ley");
}
};
Pois, o que fazemos nesse segundo caso estamos criando como se fosse uma implementação, seria o mesmo que fazer aqui:
class EaiParaOLeiRunnable implements Runnable {
public void run() {
System.out.println("Eai Ley");
}
}
Runnable r = new EaiParaOLeiRunnable();
Resumindo, seria só uma forma mais simples de criar uma classe, porém, estamos dando new na classe e não na interface/classe abstrata, isso precisa estar bem claro.
Espero que tenha conseguido esclarecer!
Qualquer duvida estou a disposição :)