Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Classe abstrata sendo instanciada? "Anonymous Inner Type"

Olá, por exemplo, crio uma clase abstrata qualquer e chamo de Pai:

public abstract class Pai {
//resto do código
}

Tento instanciar a classe Pai em uma classe Teste. Como esperado, o eclipse retorna o erro:

public class Teste {
    public static void main(String[] args) {
    Pai p = new Pai();    // Cannot instantiate the type Pai;
}

Porém, digitando "P" e "ctrl + espaço" após o "new" aparece a opção "Pai() anonymus Inner Type" e ao clicar nesta opção gera-se o código:

Pai p = new Pai() {
    };    

Seria a instância da classe abstrata????

2 respostas
solução!

Oi Bruno, tudo bem?

Na verdade, o que está sendo criado aqui é uma subclasse anônima. Basicamente, elas são classes internas, sem nome, que serão usadas apenas uma vez. Então, quando você executar esse tipo de código Pai p = new Pai() {...};, por baixo dos panos o Java está gerando uma subclasse compatível com o objeto Pai (não a referência).

Como uma classe abstrata não pode ser instanciada, o Eclipse sugeriu que fosse criada essa classe anônima para "contornar" essa regra. Então agora você poderia, por exemplo, chamar os métodos do objeto Pai dentro das chaves sem problemas.

Mais pra frente na parte 6 do curso, você verá um pouco mais sobre essas classes anônimas.

Espero ter ajudado, qualquer dúvida é só avisar!

Bons estudos!!

Obrigado pela informação caro Thiago Yuji Enjo! Estava realmente confuso com esta opção kk