16.1.3 Ein
Interface implementieren
|
|
Dieser
kleine Abschnitt ist hier nur der Vollständigkeit halber eingefügt und
kann im Moment übersprungen werden. Es handelt von Interfaces, eine Art
dritte Variante von Klassen. Ein Interface ein Klasse, die nur abstrakte Methoden besitzt. Selbstredend, dass man auch von ihnen keine Instanzen bilden kann, es sei denn, man implementiert dabei gleichzeitig die abstrakten Methoden1). Statt zu sagen, eine Klasse A erbt vom Interface B, sagen wir lieber A implementiert das Interface B und schreiben anstelle des reservierten Wortes extends dann implements.
|
|
Quellcode für ein Beispiel |
|
UML |
|
Anwendung |
aber auch
|
Das
zweite Beispiel zeigt, wie man das Verbot, von einer abstrakten Klasse
oder Interface Instanzen zu bilden, umgehen kann. Man stellt sicher, dass
beim Erzeugen der Instanz die geerbte, abstrakte Methode gleich mit implementiert
wird. |
|
Mehrfach- vererbung |
Wozu
setzt man Interfaces ein?
1. Das Problem der
Mehrfachvererbung 2. Zusicherung und Konsistenz Es gibt auchInterfaces, die mehrerer (abstrakte) Methoden besitzen, wie etwa das Interface MouseMotionListener. Es hat die abstrakten Methoden mouseDragged(MouseEvent e) und MouseMoved(MouseEvent e). Implementiert man nun das Interface MouseMotionListener, so muss man beide abstrakte Methoden implementieren, auch wenn man nur eine der beiden benötigt. Das ist umständlich. Java stellt für MouseMotionListener wie auch für alle Interfaces mit mehr als einer abstrakten Methode sog. Adapterklassen zur Verfügung. So gibt es die Klasse MouseMotionAdapter, die die abstrakten Methoden von MouseMotionListener implementiert. Allerdings haben die so implementierten Methoden keinerlei Funktionalität. Das kann man so sehen: Im Inteface MouseMotionListerner gibt es, wie schon erwähnt, die Methode public abstract void mousedragged(MouseEvent e); in der Adapterklasse wird daraus: public void mousedragged(MouseEvent e){} Die Methode ist jetzt nicht mehr abstrakt,
im Anweisungsblock steht aber nichts, so dass die implementierte Methode
keinerlei Funktionalität besitzt: sie kann nichts. Das gleiche macht man
nun mit allen anderen abstrakten Klassen des Interfaces. Statt nun das
Interfaces MouseMotionListener(MouseEvent e) zu implementieren (implements)
und dabei alle geerbten abstrakten Methode zu überschreiben, kann man von
MousMotionAdapter
erben (extends)
und muss nur noch die gewünschte Methode überschreiben. Diese
Vereinfachung funktioniert natürlich nur dann, wenn wir nicht noch
gleichzeitig von einer anderen Klasse erben wollen. |
Fußnoten | |
Diese
Variante, dass man beim Aufruf eines Konstruktor die abstrakte Methode
implementiert, werden wir später und ausführlicher kennen lernen. [zurück] |
|
zu | 16.1.4 Übungen |
zur Startseite | www.pohlig.de (C) MPohlig 2005 |