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.
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 = "vehicle";
}
class Car extends Vehicle {
String name = "car";
public void printMyName() {
System.out.println(name);
}
public void printParentName() {
// use super keyword to access
// parent's data member / attribute
System.out.println(super.name);
}
public static void main(String[] args) {
Car myCar = new Car();
System.out.print("My Car's Name: ");
myCar.printMyName();
// printing the parent's name
// using the super keyword
System.out.print("My Parent Vehicle's Name: ");
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("Shape() parameterized constructor called!");
name = n;
}
}
class Triangle extends Shape {
int sides = 3;
String color;
public Triangle(String n, String c) {
// The super keyword calls the parameterized
// constructor of the parent (Shape) with
// 'n' as a parameter
super(n);
System.out.println("Triangle() parameterized constructor called!");
this.color = c;
}
public static void main(String[] args) {
Triangle myTriangle = new Triangle("Triangle Alpha", "Yellow");
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("Play sound!");
}
}
class Drum extends Sound {
public void voice() {
System.out.println("Play drums!");
}
public void play() {
// The super keyword calls the
// voice() method of the parent
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