Super
Nehmen wir mal an, WindowAdapter würde doch sinnvolle Funktionalität anbieten, die wir weiterhin verwenden wollten. Wir könnten dann auch die Methode der Elternklasse aufrufen, indem wir das Schlüsselwort super verwenden.
class WindowListenerImplextends WindowAdapter {
public voidwindowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(0);
}
}
Der Code der Elternklasse ist also nicht verloren, sondern nur durch Überschreiben verdeckt.
Super lässt sich auch mit dem Konstruktor nutzen. Die Syntax ist hier wie bekannt:
/**
* Das ist der Konstruktor
*/
ClosableFrame(Stringtitle){
super(title);
// setTitle(title); können wir uns dann sparen..
doInit();
}
Super beim Konstruktor kennt zwei Besonderheiten:
- Der super(..) Aufruf muss die erste Codezeile im Konstruktor sein.
- Es wird stets ein Konstruktor der Elternklasse aufgerufen, auch wenn wir es nicht explizit angeben.
Ohne Aufruf mit super(..) erfolgt ein Aufruf des parameterlosen Standardkonstruktors der Elternklasse, d.h. des Konstruktors Frame() ohne Parameter. Wenn wir super explizit schreiben, können wir bestimmen, welcher Konstruktor benutzt werden soll. Existiert kein Standardkonstruktor in der Elternklasse und super (..) fehlt in der Kindklasse, so kompiliert die Kindklasse nicht.