10 Implementieren einer Listenerklasse

Submitted by javafrage on Fri, 01/25/2013 - 09:50

Implementieren Sie eine Listenerklasse zum Behandeln von Mausklicks.
Benutzen Klassen aus dem Java API um diese Aufgabe zu lösen.

Siehe Diagramm:

 Listener-Hierarchie

Implementieren Sie die Klasse MeinMausListener. Die Klasse soll auf die Ereignisse MousePressed und MouseReleased reagieren.
Welche Klasse bzw. Schnittstelle wählen Sie um den Implementierungsaufwand minimal zu halten?
Wählen Sie den besten Methodenkopf (ankreuzen):.

  1. public class MeinMausListener extends MouseMotionListener
  2. public class MeinMausListener implements MouseMotionListener 
  3. public class MeinMausListener extends MouseListener 
  4. public class MeinMausListener implements MouseListener 
  5. public class MeinMausListener extends MouseAdapter 
  6. public class MeinMausListener implements MouseAdapter 
  7. public class MeinMausListener extends EventListener 
  8. public class MeinMausListener implements EventListener 

Welche andere Option ist die nächstbeste, aber suboptimal?

Warum ist diese Option suboptimal?

Niveau 2
Schwierigkeitsgrad mittel
Zeit 2+2+2 Minuten

 

Antwort zu Frage 9: Innere und anonyme Klassen

Man kann sie direkt in der Klasse implementieren die sie exklusiv benötigen.
Dadurch benötigt man weniger Klassen.
Man belegt den Namensraum des Pakets nicht unnötig mit Klassennamen.
Man kann auf die Variablen und Methoden der umgebenden Klasse/Objekt zugreifen.

 

Anonymous (not verified)

Wed, 02/18/2015 - 18:27

Fehlt nach der "divide: geschafft" nicht "divide: after"? Bei der 2.54 steht es noch.

Sie haben haben sich das sehr genaue angeschaut. Gute Sache!

Durch das Werfen (Kommando throw) der IllegalArgumentException wird die Methode divide() abgebrochen da diese Ausnahme nicht in der Methode gefangen wird. "Divide after" wird nicht mehr erreicht.
Das Hinterhältige diese Aufgabe besteht darin, dass die Sonderregel "finally Blöcke werden immer ausgeführt" zum tragen kommt.
"divide: geschafft" wird also noch ausgeführt obwohl das Laufzeitsystem auf dem schnellsten Weg die Methode divide() verlassen möchte.
Ihre Frage hat eine gute Detaildiskussion angeregt. Danke!