Dúvidas sobre MouseListener

1 resposta
adrianomeira

Olá,

Curso o 3º Termo de Sistemas de Informação na FIO (Faculdades Integradas de Ourinhos/SP).

Fiz uma avaliação na qual constava uma pergunta + ou - assim:

Quando se utiliza uma interface (por exemplo, MouseListener) é correto afirmar que:

A resposta correta é que tem que ser declarados todos os métodos referentes a MouseListener (mouseClicked, mouseEntered, mouseExited, mousePressed, mouseReleased)

Porém, o professor havia nos ensinado o MouseAdapter que não torna obrigatória a declaração dos métodos acima. Diante disso aleguei que não tinha resposta correta e após a prova ele me informou que essa acima seria a resposta correta.

Agora, gostaria de saber, se usando o MouseAdapter, eu não estou usando a interface para escutar eventos do mouse? e a pergunta não diz: “Quando se utiliza uma interface…”, quer dizer, com a MouseAdapter eu estou usando uma interface?

Gostaria muito da ajuda de vocês.

Muito obrigado a todos.

1 Resposta

B

Adriano esta pergunta é bem interessante, pois ficamos tão viciados com IDEs que geram automaticamente os métodos que estão descritos nas interfaces, que acabamos esquecendo que temos os adapters que deixam o nosso código muito mais legivel.

O que o seu professor esqueceu de explicar é que MouseAdapter é uma classe que implementa a interface MouseListener.

Quando temos uma calsse concreta que implementa uma interface somos obrigados a implementar todos os métodos desta interface, mesmo que não usemos todos eles. Você pode notar que alguns listener possuem vários métodos, e as vezes queremos usar apenas um deles.
A classe MouseAdapter vem para ajudar seu código a ficar mais limpo, pois ela é uma classe que implementa a interface MouseListener e sobreescreve todos os métodos deixando-os sem corpo.
Quando você estende a classe MouseAdapter vocẽ não é obrigado a implementar nenhum método, o que você faz é sobreescrever algum dos métodos desta classe e através do polimorfismo você consegue adicionar esta instância como um listener de um componente.

Lembre-se que quando sobreescrevemos em uma classe filha um método de uma classe mãe uma chamada como a abaixo chamaria o método implementado na classe filha, e não o método implementado na classe mãe. Por isso a resposta seria que temos que implementar todos os métodos, pois ele está dizendo que estamos usando diretamente a interface MouseListener e não através de um Adapter.

class A {
  public void doIt() {
      //código de doIt em A
  }
}
class B extends A {
  public void doIt() {
    //codigo de doIt em B
  }
}

public class Main{
public static void main(String[] args) {
   A a = new A();
   A a2 = new B();
   
   a.doIt(); //executa doIt de A
   a2.doIt(); //executa doIt de B
}
}
Criado 15 de abril de 2009
Ultima resposta 15 de abr. de 2009
Respostas 1
Participantes 2