Überschreiben der Java-Methode

In diesem Tutorial lernen wir anhand von Beispielen, wie Methoden in Java überschrieben werden.

Im letzten Tutorial haben wir etwas über Vererbung gelernt. Vererbung ist eine OOP-Eigenschaft, mit der wir eine neue Klasse (Unterklasse) von einer vorhandenen Klasse (Oberklasse) ableiten können. Die Unterklasse erbt die Attribute und Methoden der Oberklasse.

Wenn nun dieselbe Methode sowohl in der Oberklasse als auch in der Unterklasse definiert ist, überschreibt die Methode der Unterklassenklasse die Methode der Oberklasse. Dies wird als Methodenüberschreibung bezeichnet.

Beispiel 1: Methodenüberschreibung

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Ausgabe :

 Ich bin ein Hund. 

Im obigen Programm ist die displayInfo()Methode sowohl in der Tier-Superklasse als auch in der Hund-Unterklasse vorhanden.

Wenn wir displayInfo()mit dem Objekt d1 (Objekt der Unterklasse) aufrufen , wird die Methode innerhalb der Unterklasse Dog aufgerufen. Die displayInfo()Methode der Unterklasse überschreibt dieselbe Methode der Oberklasse.

Beachten Sie die Verwendung der @OverrideAnmerkung in unserem Beispiel. In Java sind Anmerkungen die Metadaten, mit denen wir dem Compiler Informationen zur Verfügung gestellt haben. Hier gibt die @OverrideAnnotation den Compiler an, dass die Methode nach dieser Annotation die Methode der Oberklasse überschreibt.

Die Verwendung ist nicht obligatorisch @Override. Wenn wir dies verwenden, sollte die Methode jedoch alle Regeln zum Überschreiben befolgen. Andernfalls generiert der Compiler einen Fehler.

Java-Überschreibungsregeln

  • Sowohl die Oberklasse als auch die Unterklasse müssen denselben Methodennamen, denselben Rückgabetyp und dieselbe Parameterliste haben.
  • Wir können die als finalund deklarierte Methode nicht überschreiben static.
  • Wir sollten immer abstrakte Methoden der Oberklasse überschreiben (wird in späteren Tutorials besprochen).

Super Keyword in Java Overriding

Eine häufig gestellte Frage beim Überschreiben in Java lautet:

Können wir nach dem Überschreiben auf die Methode der Oberklasse zugreifen?

Die Antwort lautet Ja . Um von der Unterklasse aus auf die Methode der Oberklasse zuzugreifen, verwenden wir das superSchlüsselwort.

Beispiel 2: Verwendung des Super-Schlüsselworts

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( super.displayInfo(); System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Ausgabe :

Ich bin ein Tier. Ich bin ein Hund.

Im obigen Beispiel überschreibt die Unterklasse Hund die Methode displayInfo()der Oberklasse Tier.

Wenn wir die Methode displayInfo()mit dem Objekt d1 der Dog-Unterklasse aufrufen , wird die Methode innerhalb der Dog-Unterklasse aufgerufen. Die Methode innerhalb der Oberklasse wird nicht aufgerufen.

Innerhalb displayInfo()der Dog-Unterklasse haben wir die Superklasse super.displayInfo()aufgerufen displayInfo().

Es ist wichtig zu beachten, dass Konstruktoren in Java nicht vererbt werden. Daher gibt es in Java keinen Konstruktor, der überschreibt.

Wir können jedoch den Konstruktor der Oberklasse aus ihren Unterklassen aufrufen. Dafür verwenden wir super(). Um mehr zu erfahren, besuchen Sie Java Super Keyword.

Zugriffsspezifizierer beim Überschreiben von Methoden

Dieselbe Methode, die in der Oberklasse und ihren Unterklassen deklariert ist, kann unterschiedliche Zugriffsspezifizierer haben. Es gibt jedoch eine Einschränkung.

Wir können diese Zugriffsspezifizierer nur in Unterklassen verwenden, die einen größeren Zugriff bieten als der Zugriffsspezifizierer der Oberklasse. Beispielsweise,

Angenommen, eine Methode myClass()in der Oberklasse wird deklariert protected. Dann kann dieselbe Methode myClass()in der Unterklasse entweder publicoder sein protected, aber nicht private.

Beispiel 3: Zugriffsspezifizierer beim Überschreiben

 class Animal ( protected void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Ausgabe :

 Ich bin ein Hund. 

Im obigen Beispiel überschreibt die Unterklasse Hund die Methode displayInfo()der Oberklasse Tier.

Immer wenn wir displayInfo()mit d1 (Objekt der Unterklasse) aufrufen , wird die Methode innerhalb der Unterklasse aufgerufen.

Beachten Sie, dass das in der Tier-Superklasse displayInfo()deklariert ist protected. Dieselbe Methode hat den publicZugriffsspezifizierer in der Unterklasse Dog. Dies ist möglich, weil der publicZugriff größer ist als der protected.

Überschreiben abstrakter Methoden

In Java werden abstrakte Klassen erstellt, um die Oberklasse anderer Klassen zu sein. Wenn eine Klasse eine abstrakte Methode enthält, muss diese unbedingt überschrieben werden.

In späteren Tutorials erfahren Sie mehr über abstrakte Klassen und das Überschreiben abstrakter Methoden.

Interessante Beiträge...