EMZETT.
Login

super-Keyword

Kurz: Eine Referenz auf die Oberklasse innerhalb einer Unterklasse — ruft entweder den Konstruktor der Oberklasse auf (super(...)) oder greift auf eine von ihr überschriebene Methode zu (super.methode()).

Genauer: super(...) muss, falls verwendet, die allererste Zeile im Konstruktor der Unterklasse sein. Ohne expliziten Aufruf ruft Java automatisch den parameterlosen Konstruktor der Oberklasse auf — hat die Oberklasse keinen solchen, entsteht ein Kompilierfehler, der super(...) explizit erzwingt.

Im Detail

class Fahrzeug {
    protected int geschwindigkeit;
 
    Fahrzeug(int geschwindigkeit) {
        this.geschwindigkeit = geschwindigkeit;
    }
 
    void info() { System.out.println("Fahrzeug mit " + geschwindigkeit + " km/h"); }
}
 
class Auto extends Fahrzeug {
    Auto(int geschwindigkeit) {
        super(geschwindigkeit); // ruft Fahrzeug(int) auf - MUSS erste Zeile sein
    }
 
    @Override
    void info() {
        super.info(); // ruft die ÜBERSCHRIEBENE Version aus Fahrzeug zusätzlich auf
        System.out.println("...und ist ein Auto");
    }
}

super hat zwei unterschiedliche Anwendungen, die leicht verwechselt werden: super(...) (mit Klammern) ruft einen Konstruktor der Oberklasse auf und darf ausschließlich als erste Anweisung in einem Konstruktor stehen. super.methode() (ohne Klammern direkt nach dem Punkt) ruft dagegen die Version einer Methode auf, wie sie in der Oberklasse implementiert ist — nützlich, wenn man eine Methode zwar überschreiben (@Override), aber das Verhalten der Oberklasse nicht komplett ersetzen, sondern nur ERGÄNZEN will (wie im info()-Beispiel oben).

Verzichtet man in einem Unterklassen-Konstruktor ganz auf super(...), fügt der Compiler automatisch einen unsichtbaren Aufruf des parameterlosen Konstruktors der Oberklasse ein. Hat die Oberklasse aber gar keinen parameterlosen Konstruktor (weil z. B. nur Fahrzeug(int) existiert, wie oben), zwingt ein Compilerfehler dazu, super(...) explizit mit den passenden Argumenten aufzurufen.

Siehe auch: Inheritance, this-Keyword, Constructors