Das super-Schlüsselwort wird in verschiedenen Situationen verwendet. Bevor du diesen Beitrag liest, empfehlen wir dir, dich mit dem Thema Vererbung in Java zu beschäftigen, damit du alles besser verstehst.
![Super-Schlüsselwort in Java - 1]()
Was ist das Schlüsselwort super in Java?
super ist ein Schlüsselwort, das verwendet werden kann, um überschriebene Methoden der Oberklasse aufzurufen und um auf versteckte Felder der Oberklasse zu verweisen.Warum und wann sollte man das Schlüsselwort super verwenden?
Das Java-Schlüsselwort super hat drei explizite Verwendungsbereiche.- Zugriff auf die Datenelemente der Elternklasse, wenn die Kindklasse ebenfalls Datenelemente mit demselben Namen hat.
- Aufruf der Standard- oder parametrisierten Konstruktoren der Elternklasse in der Kindklasse.
- Aufruf der Methoden der Elternklasse in der Kindklasse, wenn die Kindklasse Methoden überschrieben hat.
Beispiel 1 – Zugriff auf die Datenelemente der Eltern
Beispiel 1 veranschaulicht, wie auf die Attribute oder Datenelemente der Klasse Vehicle in der Unterklasse Carzugegriffen werden kann. Um das zu verstehen, musst du den folgenden Code ausführen.
class Vehicle {
String name = "Fahrzeug";
}
class Car extends Vehicle {
String name = "Auto";
public void printMyName() {
System.out.println(name);
}
public void printParentName() {
// Verwende das Schlüsselwort super für den Zugriff
// auf das Datenelement/Attribut der Eltern
System.out.println(super.name);
}
public static void main(String[] args) {
Car myCar = new Car();
System.out.print("Der Name meines Autos: ");
myCar.printMyName();
// Ausgeben des Namens der Eltern
// mit dem Schlüsselwort super
System.out.print("Der Name meines Elternfahrzeugs: ");
myCar.printParentName();
}
}
Ausgabe
Der Name meines Autos: Auto
Der Name meines Elternfahrzeugs: Fahrzeug
Beispiel 2 – Zugriff auf die Konstruktoren der Elternklasse in der Kindklasse
Durch den expliziten Aufruf von super() kannst du in der Kindklasse sowohl auf den Standard- als auch auf den parametrisierten Konstruktor der Elternklasse zugreifen. Hier ist ein Beispiel für einen parametrisierten Konstruktor. Der Konstruktor der übergeordneten Klasse Shape wird (mit super()) in der untergeordneten Klasse Triangle aufgerufen, um die Attribute zu setzen. Führe das folgende Programm aus, um die Ausgabe selbst zu testen.
public class Shape {
String name;
public Shape(String n) {
System.out.println("Parametrisierter Shape()-Konstruktor aufgerufen!");
name = n;
}
}
class Triangle extends Shape {
int sides = 3;
String color;
public Triangle(String n, String c) {
// Das Schlüsselwort super ruft den parametrisierten
// Konstruktor des Elternteils (Shape) mit
// 'n' als Parameter auf
super(n);
System.out.println("Parametrisierter Triangle()-Konstruktor aufgerufen!");
this.color = c;
}
public static void main(String[] args) {
Triangle myTriangle = new Triangle("Dreieck Alpha", "Gelb");
System.out.println(myTriangle.name);
System.out.println(myTriangle.color);
}
}
Ausgabe
Parametrisierter Shape()-Konstruktor aufgerufen!
Parametrisierter Triangle()-Konstruktor aufgerufen!
Dreieck Alpha
Gelb
Schnelle Herausforderung: Um dein Wissen zu testen, überarbeite das obige Programm, indem du den Standardkonstruktor verwendest. Siehe auch, wie sich super() von super(arg) unterscheidet.
Beispiel 3 – Zugriff auf die überschriebene Methode der Elternklasse in der Kindklasse
Beispiel 3 zeigt, wie du auf die Methoden der Elternklasse zugreifen kannst, die auch von der Kindklasse definiert werden. Die übergeordnete Klasse Sound in dem folgenden Programm definiert eine Methode voice(). Die Kindklasse Drum hat auch eine Methode mit demselben Namen, nämlich voice(). Das bedeutet, dass die Methode voice von der Unterklasse überschrieben wird. Führe das folgende Programm aus, um zu sehen, dass das Schlüsselwort super notwendig ist, um die Methoden der Elternklasse in der Kindklasse zu verwenden.
public class Sound {
public void voice() {
System.out.println("Ton abspielen!");
}
}
class Drum extends Sound {
public void voice() {
System.out.println("Schlagzeug spielen!");
}
public void play() {
// Das Schlüsselwort super ruft die
// voice()-Methode des Elternteils auf
super.voice();
voice();
}
public static void main(String[] args) {
Drum myDrum = new Drum();
myDrum.play();
}
}
Ausgabe
Parametrisierter Shape()-Konstruktor aufgerufen!
Parametrisierter Triangle()-Konstruktor aufgerufen!
Dreieck Alpha
Gelb

GO TO FULL VERSION