Das Schlüsselwort super wird in Java verwendet, um auf das unmittelbare übergeordnete Klassenobjekt zu verweisen. Sie wird häufig verwendet, um auf die Methoden und Konstruktoren der Elternklasse zuzugreifen, damit eine Unterklasse die Funktionalität ihrer Oberklasse erben und wiederverwenden kann.
Verwendung
Das Schlüsselwort super kann in drei Hauptkontexten verwendet werden:
Um den Konstruktor der Oberklasse aufzurufen.
Um auf eine Methode aus der Oberklasse zuzugreifen, die in der Unterklasse überschrieben wurde.
Um auf ein Feld aus der Oberklasse zuzugreifen, wenn es durch ein gleichnamiges Feld in der Unterklasse ausgeblendet wird.
classAnimal{Animal(){
System.out.println("Animal constructor called");}}classDogextendsAnimal{Dog(){super();// Calls the constructor of Animal class
System.out.println("Dog constructor called");}}publicclassTestSuper{publicstaticvoidmain(String[] args){
Dog d =newDog();// Output: Animal constructor called// Dog constructor called}}Bereitgestellt von
In diesem Beispiel ruft der super() Aufruf im Dog Konstruktor den Konstruktor der Animal Klasse auf.
Beispiel 2: Zugriff auf Oberklassen-Methode
classAnimal{voidsound(){
System.out.println("Animal makes a sound");}}classDogextendsAnimal{voidsound(){super.sound();// Calls the sound() method of Animal class
System.out.println("Dog barks");}}publicclassTestSuper{publicstaticvoidmain(String[] args){
Dog d =newDog();
d.sound();// Output: Animal makes a sound// Dog barks}}Bereitgestellt von
Hier ruft der Aufruf super.sound() in der Methode der Klasse Dogsound() die Methode sound() der Klasse Animal auf.
Beispiel 3: Zugriff auf das Feld der Oberklasse
classAnimal{
String color ="white";}classDogextendsAnimal{
String color ="black";voiddisplayColor(){
System.out.println("Dog color: "+// Prints the color of Dog class
System.out.println("Animal color: "+super.// Prints the color of Animal class}}publicclassTestSuper{publicstaticvoidmain(String[] args){
Dog d =newDog();
d.displayColor();// Output: Dog color: black// Animal color: white}}Bereitgestellt von
In diesem Beispiel wird super.color verwendet, um auf das Feld color der Klasse Animal zuzugreifen, das durch das Feld color der Klasse Dog verdeckt wird.
Tipps und bewährte Praktiken
Konstrukteursverkettung: Verwende super() im Konstruktor einer Unterklasse, um sicherzustellen, dass der Konstruktor der Oberklasse aufgerufen wird, damit das Objekt richtig initialisiert werden kann.
classParent{Parent(){
System.out.println("Parent constructor");}}classChildextendsParent{Child(){super();// Always the first statement in the constructor
System.out.println("Child constructor");}}Bereitgestellt von
Method Overriding: Verwende super.methodName(), um eine Methode aus der Oberklasse aufzurufen, wenn sie in der Unterklasse überschrieben wird. Dies ist nützlich, um das Verhalten der geerbten Methode zu erweitern oder zu ändern.
classParent{voiddisplay(){
System.out.println("Parent display");}}classChildextendsParent{voiddisplay(){super.display();// Calls Parent's display method
System.out.println("Child display");}}Bereitgestellt von
Feldzugang: Verwende super.fieldName, um auf ein Feld der Oberklasse zuzugreifen, wenn es durch ein gleichnamiges Feld in der Unterklasse verborgen ist. Das hilft, Mehrdeutigkeiten zu vermeiden und stellt sicher, dass auf das richtige Feld zugegriffen wird.
classParent{
int number =10;}classChildextendsParent{
int number =20;voidshowNumber(){
System.out.println(super.number);// Accesses Parent's number}}Bereitgestellt von
Lesbarkeit: Verwende super mit Bedacht, um deinen Code lesbarer und wartbarer zu machen. Die übermäßige Verwendung von super kann dazu führen, dass der Code schwerer zu verstehen ist.
Platzierung im Baugewerbe: Platziere den Aufruf super() immer als erste Anweisung im Konstruktor der Unterklasse, um Kompilierungsfehler zu vermeiden.
Statische Kontexte: Denk daran, dass super nicht in statischen Methoden oder statischen Kontexten verwendet werden kann, da es sich auf eine Instanz einer Klasse bezieht.
Das Schlüsselwort
superwird in Java verwendet, um auf das unmittelbare übergeordnete Klassenobjekt zu verweisen. Sie wird häufig verwendet, um auf die Methoden und Konstruktoren der Elternklasse zuzugreifen, damit eine Unterklasse die Funktionalität ihrer Oberklasse erben und wiederverwenden kann.Verwendung
Das Schlüsselwort
superkann in drei Hauptkontexten verwendet werden:Syntax
Beispiele
Beispiel 1: Aufruf des Superklassen-Konstruktors
In diesem Beispiel ruft der
super()Aufruf imDogKonstruktor den Konstruktor derAnimalKlasse auf.Beispiel 2: Zugriff auf Oberklassen-Methode
Hier ruft der Aufruf
super.sound()in der Methode der KlasseDogsound()die Methodesound()der KlasseAnimalauf.Beispiel 3: Zugriff auf das Feld der Oberklasse
In diesem Beispiel wird
super.colorverwendet, um auf das Feldcolorder KlasseAnimalzuzugreifen, das durch das Feldcolorder KlasseDogverdeckt wird.Tipps und bewährte Praktiken
super()im Konstruktor einer Unterklasse, um sicherzustellen, dass der Konstruktor der Oberklasse aufgerufen wird, damit das Objekt richtig initialisiert werden kann.super.methodName(), um eine Methode aus der Oberklasse aufzurufen, wenn sie in der Unterklasse überschrieben wird. Dies ist nützlich, um das Verhalten der geerbten Methode zu erweitern oder zu ändern.super.fieldName, um auf ein Feld der Oberklasse zuzugreifen, wenn es durch ein gleichnamiges Feld in der Unterklasse verborgen ist. Das hilft, Mehrdeutigkeiten zu vermeiden und stellt sicher, dass auf das richtige Feld zugegriffen wird.supermit Bedacht, um deinen Code lesbarer und wartbarer zu machen. Die übermäßige Verwendung vonsuperkann dazu führen, dass der Code schwerer zu verstehen ist.super()immer als erste Anweisung im Konstruktor der Unterklasse, um Kompilierungsfehler zu vermeiden.supernicht in statischen Methoden oder statischen Kontexten verwendet werden kann, da es sich auf eine Instanz einer Klasse bezieht.