Adapterklassen

Status
Nicht offen für weitere Antworten.

DennisXX

Bekanntes Mitglied
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
 

Schandro

Top Contributor
Hier mal der Sourcecode (ohne Kommentare) von MouseAdapter:
Java:
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.
 
Zuletzt bearbeitet:

DennisXX

Bekanntes Mitglied
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....
 

Landei

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

DennisXX

Bekanntes Mitglied
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)
 
Zuletzt bearbeitet:

Schandro

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

DennisXX

Bekanntes Mitglied
Hier mal der Sourcecode (ohne Kommentare) von MouseAdapter:
Java:
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){}

}

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?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Adapterklassen vs Interfaces Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben