Java Super Keyword (mit Beispielen)

In diesem Tutorial lernen wir anhand von Beispielen das Super-Schlüsselwort in Java kennen.

Das superSchlüsselwort in Java wird in Unterklassen verwendet, um auf Mitglieder der Oberklasse (Attribute, Konstruktoren und Methoden) zuzugreifen.

Bevor wir uns mit dem superSchlüsselwort vertraut machen, sollten Sie sich mit der Java-Vererbung vertraut machen.

Verwendung von Super-Schlüsselwörtern

  1. Aufrufen von Methoden der Oberklasse, die in der Unterklasse überschrieben werden.
  2. Zugriff auf Attribute (Felder) der Oberklasse, wenn sowohl die Oberklasse als auch die Unterklasse Attribute mit demselben Namen haben.
  3. Zum expliziten Aufrufen des Superklassen-No-Arg (Standard) oder des parametrisierten Konstruktors aus dem Unterklassenkonstruktor.

Lassen Sie uns jede dieser Verwendungen verstehen.

1. Greifen Sie auf überschriebene Methoden der Oberklasse zu

Wenn Methoden mit demselben Namen sowohl in der Oberklasse als auch in der Unterklasse definiert sind, überschreibt die Methode in der Unterklasse die Methode in der Oberklasse. Dies wird als Methodenüberschreibung bezeichnet.

Beispiel 1: Methodenüberschreibung

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Ausgabe

 Ich bin ein Hund 

In diesem Beispiel können wir durch Erstellen eines Objekts dog1 der Dog-Klasse dessen Methode printMessage () aufrufen, die dann die display()Anweisung ausführt .

Da display()in beiden Klassen definiert ist, überschreibt die Methode der Unterklasse Dog die Methode der Oberklasse Animal. Daher wird die display()der Unterklasse aufgerufen.

Was ist, wenn die überschriebene Methode der Oberklasse aufgerufen werden muss?

Wir verwenden, super.display()wenn die überschriebene Methode display()der Superklasse Animal aufgerufen werden muss.

Beispiel 2: Super-to-Call-Superclass-Methode

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( // this calls overriding method display(); // this calls overridden method super.display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Ausgabe

 Ich bin ein Hund, ich bin ein Tier 

Hier erfahren Sie, wie das obige Programm funktioniert.

2. Zugriff auf Attribute der Oberklasse

Die Oberklasse und die Unterklasse können Attribute mit demselben Namen haben. Wir verwenden das superSchlüsselwort, um auf das Attribut der Oberklasse zuzugreifen.

Beispiel 3: Zugriff auf das Superklassenattribut

 class Animal ( protected String; ) class Dog extends Animal ( public String; public void printType() ( System.out.println("I am a " + type); System.out.println("I am an " + super.type); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printType(); ) ) 

Ausgabe :

 Ich bin ein Säugetier Ich bin ein Tier 

In diesem Beispiel haben wir denselben Instanzfeldtyp sowohl in der Oberklasse Animal als auch in der Unterklasse Dog definiert.

Wir haben dann ein Objekt dog1 der Dog-Klasse erstellt. Anschließend wird die printType()Methode mit diesem Objekt aufgerufen.

Innerhalb der printType()Funktion,

  • Typ bezieht sich auf das Attribut der Unterklasse Hund.
  • super.type bezieht sich auf das Attribut des Tieres der Oberklasse.

Daher System.out.println("I am a " + type);druckt ich ein Säugetier. Und System.out.println("I am an " + super.type);Drucke Ich bin ein Tier.

3. Verwendung von super (), um auf den Superklassenkonstruktor zuzugreifen

Wie wir wissen, wird beim Erstellen eines Objekts einer Klasse dessen Standardkonstruktor automatisch aufgerufen.

Um den Superklassenkonstruktor explizit vom Unterklassenkonstruktor aufzurufen, verwenden wir super(). Es ist eine spezielle Form des superSchlüsselworts.

super() kann nur innerhalb des Unterklassenkonstruktors verwendet werden und muss die erste Anweisung sein.

Beispiel 4: Verwendung von super ()

 class Animal ( // default or no-arg constructor of class Animal Animal() ( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // default or no-arg constructor of class Dog Dog() ( // calling default constructor of the superclass super(); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Ausgabe

 Ich bin ein Tier, ich bin ein Hund 

Wenn hier ein Objekt dog1 der Dog-Klasse erstellt wird, ruft es automatisch den Standard- oder No-Arg-Konstruktor dieser Klasse auf.

Innerhalb des Unterklassenkonstruktors super()ruft die Anweisung den Konstruktor der Oberklasse auf und führt die darin enthaltenen Anweisungen aus. Daher erhalten wir die Ausgabe Ich bin ein Tier.

Der Programmablauf kehrt dann zum Unterklassenkonstruktor zurück und führt die verbleibenden Anweisungen aus. Somit bin ich ein Hund, der gedruckt wird.

Die Verwendung super()ist jedoch nicht obligatorisch. Auch wenn super()es im Unterklassenkonstruktor nicht verwendet wird, ruft der Compiler implizit den Standardkonstruktor der Oberklasse auf.

Warum also redundanten Code verwenden, wenn der Compiler automatisch super () aufruft?

Es ist erforderlich, wenn der parametrisierte Konstruktor (ein Konstruktor, der Argumente akzeptiert ) der Oberklasse vom Unterklassenkonstruktor aufgerufen werden muss.

Die parametrisierte super()muss immer die erste Anweisung im Hauptteil des Konstruktors der Unterklasse sein, andernfalls wird ein Kompilierungsfehler angezeigt.

Beispiel 5: Parametrisierten Konstruktor mit super () aufrufen

 class Animal ( // default or no-arg constructor Animal() ( System.out.println("I am an animal"); ) // parameterized constructor Animal(String type) ( System.out.println("Type: "+type); ) ) class Dog extends Animal ( // default constructor Dog() ( // calling parameterized constructor of the superclass super("Animal"); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Ausgabe

 Typ: Tier Ich bin ein Hund 

Der Compiler kann den Konstruktor no-arg automatisch aufrufen. Es können jedoch keine parametrisierten Konstruktoren aufgerufen werden.

Wenn ein parametrisierter Konstruktor aufgerufen werden muss, müssen wir ihn im Unterklassenkonstruktor explizit definieren.

Beachten Sie, dass wir im obigen Beispiel den parametrisierten Konstruktor explizit aufgerufen haben super("Animal"). Der Compiler ruft in diesem Fall nicht den Standardkonstruktor der Oberklasse auf.

Interessante Beiträge...