sobreposição de métodos na instanciação

3 respostas
L

Olá pessoal!!! mais uma dúvida rss…
Estudando eventos em java, tive a curiosidade de criar e testar o codigo seguinte:

public class Teste {
	public static void main(String[] args) {
		Teste te = (new Teste() {
			public void fechando() {
				System.out.println("Saindo...");
				System.exit(0);
			}
		});
		te.iniciando();
		te.fechando();
	}
	
	public void iniciando() {
	    System.out.println("iniciando...");
	}
	
	public void fechando() {
	}
}

Reparem no momento em que crio a instância da classe eu redefini o método fechando() … gostaria de saber como se chama isso! é sobreposição de métodos no momento da criação do objeto??? nunca vi coisa parecida em outras linguagens… gostaria de saber como funciona e o pq disso funcionar!!!

3 Respostas

bzanchet

Esta é uma “Anonymous class”.

Funciona porque… está na especificação da linguagem. :wink:

Quanto ao “nunca vi isso em outras linguagens”… dê uma olhada em python, ruby, smalltalk… têm coisas bem mais legais do que isto. :slight_smile:

L

pq classe anônima? blz, pq esta a especificação da linguagem… ok, mas fora isso, pq uma classe anônima se eu posso apenas sobrepor metodos?
uma classe anonima no sentido logico poderia ser se eu podesse criar metodos daquela forma… qual o sentido disso?

FredMP

Uma classe interna anônima é uma classe que como o próprio nome diz não possui nome! :smiley:
Na verdade, quando vc cria uma classe anônima vc está criando uma subclasse da classe a qual está se referindo ou uma implementação da interface a qual está se referindo:

Object o = new Object() { // meus métodos sobrescritos };

ou

Interface i = new Interface() { // implementação dos métodos da interface };

Repare que nesse último exemplo vc não está criando uma instância da interface, mas sim uma classe anônima que implementa essa interface!

Lembrando que vc tb pode definir uma classe anônima como argumento de um método:

Assinatura do método:
public void meuMetodo(MeuObjeto obj)

Argumento passado ao método em tempo de execução:
meuMetodo(new MeuObjeto() { // métodos } );

Em geral, classes anônimas são bastante utilizadas em manipuladores de eventos.

Criado 21 de outubro de 2006
Ultima resposta 21 de out. de 2006
Respostas 3
Participantes 3