Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java super

Java-Super

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

Der super Das Schlüsselwort in Java wird in Unterklassen verwendet, um auf Oberklassenelemente (Attribute, Konstruktoren und Methoden) zuzugreifen.

Bevor wir etwas über super erfahren Schlüsselwort, stellen Sie sicher, dass Sie etwas über die Java-Vererbung wissen.


Verwendungen des Super-Keywords

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

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 Methodenüberschreibung genannt.

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

I am a dog

In diesem Beispiel durch Erstellen eines Objekts dog1 von Hund Klasse, können wir ihre Methode printMessage() aufrufen der dann display() ausführt Aussage.

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

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

Wir verwenden super.display() wenn die überschriebene Methode display() der Oberklasse Animal muss angerufen werden.

Beispiel 2:super zum Aufrufen der Superklassenmethode

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

I am a dog
I am an animal

Hier, wie das obige Programm funktioniert.


2. Zugriffsattribute der Oberklasse

Oberklasse und Unterklasse können gleichnamige Attribute haben. Wir verwenden den super Schlüsselwort, um auf das Attribut der Oberklasse zuzugreifen.

Beispiel 3:Zugriff auf Oberklassenattribut

class Animal {
  protected String type="animal";
}

class Dog extends Animal {
  public String type="mammal";

  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 :

I am a mammal
I am an animal

In diesem Beispiel haben wir dasselbe Instanzfeld type definiert sowohl in der Oberklasse Animal und die Unterklasse Dog .

Dann haben wir ein Objekt dog1 erstellt des Hundes Klasse. Dann die printType() Methode wird mit diesem Objekt aufgerufen.

Innerhalb der printType() Funktion,

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


3. Verwendung von super(), um auf den Konstruktor der Superklasse zuzugreifen

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

Um den Konstruktor der Oberklasse explizit vom Konstruktor der Unterklasse aufzurufen, verwenden wir super() . Es ist eine Sonderform des super Schlüsselwort.

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

I am an animal
I am a dog

Hier, wenn ein Objekt dog1 von Hund Klasse erstellt wird, ruft sie automatisch den Standard- oder No-Arg-Konstruktor dieser Klasse auf.

Innerhalb des Unterklassenkonstruktors, dem super() Anweisung ruft den Konstruktor der Oberklasse auf und führt die darin enthaltenen Anweisungen aus. Daher erhalten wir die Ausgabe I am an animal .

Der Ablauf des Programms kehrt dann zum Unterklassenkonstruktor zurück und führt die verbleibenden Anweisungen aus. Also Ich bin ein Hund wird gedruckt.

Verwenden Sie jedoch super() ist nicht zwingend. Auch wenn super() 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 muss vom Unterklassenkonstruktor aufgerufen werden.

Der parametrisierte super() muss immer die erste Anweisung im Körper des Konstruktors der Unterklasse sein, sonst erhalten wir einen Kompilierungsfehler.

Beispiel 5:Aufruf eines parametrisierten Konstruktors mit super()

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

Type: Animal
I am a dog

Der Compiler kann den No-Arg-Konstruktor automatisch aufrufen. Es kann jedoch keine parametrisierten Konstruktoren aufrufen.

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

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


Java

  1. Java-Operatoren
  2. Java-Kommentare
  3. Java for-each-Schleife
  4. Java-Strings
  5. Java-Schnittstelle
  6. Anonyme Java-Klasse
  7. Java-Versuch-mit-Ressourcen
  8. Java-Anmerkungen
  9. Java-Assertionen
  10. Java-Vektor