# Adapterklassen



## DennisXX (8. Jun 2009)

Salve Javafans !

Ich muss euch mal etwas wegen den Adapterklassen fragen. Also so wie ich das verstehe, werden diese eingesetzt, damit man nicht Methode eines Event-Interfaces implementieren muss.

Nehmen wir z.B. die Klasse Mouse-Adapter. Diese wird ja verwendet, um Mausereignisse auf meiner Benutzeroberfläche zu verarbeiten. Hier will ich jetzt nur die Methode MousePressed benutzen. 

Frage: Warum ist es nicht nötig alle Methode des Interfaces MouseListener zu implementieren? 

Wenn ich bspw. eine eigene Klasse schreibe, die das Interface MouseListener implementiert, dann muss ich ja alle Methode überschreiben, aber warum nicht bei der Adapterklasse?

MFG


----------



## Michael... (8. Jun 2009)

DennisXX hat gesagt.:


> Frage: Warum ist es nicht nötig alle Methode des Interfaces MouseListener zu implementieren?


Weil die Adapterklasse das schon für Dich macht. Du erweiterst (extends) ja dann die Adapterklasse und überschreibst nur die Methoden, die für Dich relevant sind. Um die restlichen kümmert sich der Adapter.


----------



## Schandro (8. Jun 2009)

Hier mal der Sourcecode (ohne Kommentare) von MouseAdapter:

```
public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener {

    public void mouseClicked(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mouseWheelMoved(MouseWheelEvent e){}
    public void mouseDragged(MouseEvent e){}
    public void mouseMoved(MouseEvent e){}

}
```
Alle Methoden der Interfaces werden mit leeren Methodenbody implementiert. Die Methoden, die du brauchst, kannst du Überschreiben, alle anderen kannst du ignorieren da diese bereits vom Adapter (leer) implementiert wurden. Theoretisch bräuchte die Klasse garnicht als abstract deklariert werden, ist sie aber weil eine Instanz von MosueAdapter ohne nicht mindestens eine Methode zu überschreiben eh sinnlos wäre.


----------



## DennisXX (9. Jun 2009)

Hallo !

Danke für eure Posts ! Vielleicht bin ich falsch informiert, aber muss eine konkrete Klasse, die eine abstrakte Klasse erweitert, nicht alle Methode der abstrakten Klasse implementieren, weil sie sonst automatisch abstrakt ist ? Bin mir nicht sicher....


----------



## Michael... (9. Jun 2009)

DennisXX hat gesagt.:


> aber muss eine konkrete Klasse, die eine abstrakte Klasse erweitert, nicht alle Methode der abstrakten Klasse implementieren


Nein, da Du sie wie gesagt nur erweiterst. Sonst würde z.B. MouseAdapter wenig sinn machen, da Du dann ja in Deiner Klasse die Interfaces genauso gut direkt implementieren kannst.


----------



## Landei (9. Jun 2009)

Oder anders ausgedrückt: Eine konkrete Klasse, die eine abstrakte Klasse erweitert, muss alle *abstrakten* Methoden der abstrakten Klasse implementieren.


----------



## DennisXX (9. Jun 2009)

Landei hat gesagt.:


> Eine konkrete Klasse, die eine abstrakte Klasse erweitert, muss alle *abstrakten* Methoden der abstrakten Klasse implementieren.



Wenn die konkrete Klasse also nicht alle abstarkten Methoden implementiert, dann ist sie automatisch abstrakt !? (Hoffe, es stimmt nun)


----------



## Schandro (9. Jun 2009)

nein, dann MUSST du sie als abstract deklarieren. Ansonsten weigert sich der Compiler sie zu kompilieren.


----------



## DennisXX (9. Jun 2009)

Schandro hat gesagt.:


> nein, dann MUSST du sie als abstract deklarieren. Ansonsten weigert sich der Compiler sie zu kompilieren.



Perfekt ! Nun haben wir es ganz genau ! Mensch dieses Forum bringt mich wirklich deutlich weiter ! Besten Dank für eure Beteiligungen !


----------



## DennisXX (27. Jun 2009)

Schandro hat gesagt.:


> Hier mal der Sourcecode (ohne Kommentare) von MouseAdapter:
> 
> ```
> public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener {
> ...



Nochmal kurz eine Frage zu dem Thema Adapterklassen. Wenn ich jetzt eine konkrete Klasse schreiben, die die abstrakte Klasse MouseAdapter (siehe oben) erweitert, dann kann ich doch bereits jetzt schon alle Methode in dieser konkreten Klasse aufrufen, ohne sie auch überschrieben zu haben oder?

Ich weiß, dass das zwar keinen Sinn machen würde, eine Methode unüberschrieben nutzen zu wollen (da ja gar keine Javacode ausgeführt wird), es geht mir hier lediglich um das theoretische Verständnis des OOP.

Stimmt das so?


----------



## André Uhres (27. Jun 2009)

Richtig.


----------

