Ajuda!

2 respostas
G

Salve Pessoal! Alguém poderia me explicar o que acontece neste trecho:

package com.giminiani.interfaces;

public interface MyInterface {
	String toString();
}
package com.giminiani.interfaces;

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(
				new MyInterface(){
					public String toString() { return "test123"; }
				}
		);
	}
}

Não sabia que uma interface poderia ser instanciada, nem tampouco dessa forma:

System.out.println(
		new MyInterface(){
			public String toString() { return "test123"; }
		}
);

2 Respostas

diego2005

Na verdade você não está instanciando uma interface (as mesmas não podem ser instanciadas). O que está acontecendo ai chama-se classes anônimas.

Vê se esse link te ajuda a enteder melhor…

T+

B

Isso são classes anônimas. O que vc está fazendo é instanciar um objeto de uma SUBCLASSE de “MyInterface”, e isso é perfeitamente legal. Veja q está sendo aplicado ali o conceito de overriding no método “toString()”, de mesma maneira q ocorre com implementações comuns de interfaces.

Repare tbm q a a variável de referência é do tipo da interface, portanto, apenas os métodos sobrescritos e as variáveis herdadas da interface serão “enxergadas” neste objeto.

Criado 18 de maio de 2009
Ultima resposta 18 de mai. de 2009
Respostas 2
Participantes 3