23 de setembro de 2010

Pegadinha Java IV

Os posts marcados como "Pegadinha Java" têm a intenção de testar a sagacidade dos meus alunos iniciantes na Programação em Java. São tópicos curiosos e divertidos, e não têm a intenção de medir o conhecimento na linguagem Java.

A vocês, meus alunos, lembrem-se que a idéia é bater o olho no código e apontar a resposta correta. Naturalmente, trata-se de pegadinhas, ou seja, são trechos de código bastante mal-intencionados... :-)

Nesta nova questão, uma perguntinha básica: em Java é possível dar new em Interface?

Antes de me responder, analise o código abaixo: temos uma interface chamada "Exemplo" e no mesmo arquivo, uma inner class chamada "Classe". Logo na primeira linha da classe, encontramos um bendito "new Exemplo()", ou seja, new em Interface.

Em meio ao código, alguns comentários. A parte chata da estória: este código compila sem erros!!!

Mas como? Isto não é proibido?

Copie todo o código junto, cole em um mesmo arquivo com o nome da interface pública (Exemplo.java), compile e ateste: sem erros! Por quê????

Abraço a todos e até o próximo post! :P



/*/ Isto é apenas comentário: abaixo está a interface /*/

public interface Exemplo {
    void mostra();
}

/*/ A classe abaixo vai dar new em interface! /*/
class Classe{
    Exemplo exemplo = new Exemplo() /*/ (Aqui está!) // ;
    /*/ /*/ [Sabia que isto era possível???] /*/

    /*/} Eu não sabia! /*/{

    public void mostra() {
       System.out.println("Interessante!");
    }

    /*/ >> Pior que isto compila sem erros!! << //

    //*; { Por quê? /*/};

}