Du liest:
Java Override: Die @Override-Annotation in Java!

Java Override: Die @Override-Annotation in Java!

von Patrick
30.06.2022
Alles was du über die Java Override Annotation wissen musst!

Das Java Overriding ist ein Phänomen, bei dem die Unterklasse über dieselbe Methode verfügt wie die Oberklasse und ebendiese Methode überschreibt. Neben der Java Override Annotation bei Unterklassen gibt es auch noch die sogenannte Dynamische Polymorphie. Bei dieser haben wir innerhalb einer Klasse mehrere Java Methoden mit dem selben Namen, aber mit verschiedener Anzahl an Parametern. Dieser Beitrag befasst sich mit dem Thema Java Override und behandelt folgende Inhalte:

  • Was ist die Java Override Annotation und warum ist diese so wichtig?
  • Wie kann man eine Java-Methode innerhalb der Unterklasse überschreiben?

Wie kann man eine Java-Methode überschreiben?

Das Überschreiben einer Methode bezieht sich auf die gleichen Methoden in der Unterklasse wie in der Oberklasse. Es gibt ein paar Java-Konventionen, die befolgt werden müssen, um eine Methode in Java zu überschreiben. Diese lauten wie folgt:

  • Der Name der Methode muss in der Unterklasse (Child-Class, auch Sub-Class genannt) und in der Oberklasse (Parent-Class) identisch sein.
  • Die Parameter der Methode müssen die gleichen sein wie die der Methode in der Elternklasse.
  • Sowohl die überschreibende als auch die überschriebene Methode müssen den gleichen Rückgabetyp oder Subtyp haben.
  • Eine statische Methode kann nicht überschrieben werden, wie z. B. die Java main Methode, die statisch ist.

Lass und das ganze nun besser mit einigen Praxisbeispielen verstehen!

class Auto {
    public void show() {
        System.out.println("Willkommen in unserer Garage!");
    }
}
class ElektroAutos extends Auto {
    @Override // Java Override Annotation
    public void show() {
        System.out.println("Das sind meine Elektroautos");
    }
}
class HybridAutos extends Auto {
    @Override // Java Override Annotation
    public void show() {
        System.out.println("Das sind Hybridautos");
    }
}
public class Main {
    public static void main(String[] args) {
        Auto meinErstesAuto = new Auto();
        meinErstesAuto.show();

        ElektroAutos meinElektroAuto = new ElektroAutos();
        meinElektroAuto.show();
        HybridAutos meinHybridAuto = new HybridAutos();
        meinHybridAuto.show();
    }
}

Im obigen Code,

  • wird eine Methode namens show() innerhalb unserer Oberklasse Auto deklariert.
  • Diese Methode wird in ihren beiden Unterklassen ElektroAutos & HybridAutos überschrieben.
  • Die Main-Klasse erzeugt Objekte der Ober- und Unterklassen, um den Inhalt in den einzelnen show()-Methoden ermitteln zu können.

Ausgabe auf der Konsole:

Wir haben also erfolgreich die Methode der Oberklasse (auch Parent Class-Method genannt) überschrieben!

Die Ausgabe zeigt, dass der Inhalt der Methode der Oberklasse und der Methoden der Unterklasse auf der Konsole angezeigt wird.

Die Java @Override Annotation

Dir ist vielleicht bereits im vorherigen Codebeispiel aufgefallen das wir @Override verwendet haben. Mit der @Override Annotation können wir dem Compiler mitteilen das wir absichtlich die Methode der Oberklasse überschreiben wollen, da wir ansonsten eine Warnmeldung auf der Konsole erhalten würden. Zudem erhältst du einen Warnhinweis, wenn die zu überschreibende Methode durch Tippfehler o.ä. nicht wie gewünscht überschrieben wird und du hast einen weitaus sauberen Code. Gewöhn dich also direkt daran die @Override Annotation zu verwenden, falls du die Methode einer Oberklasse überschreiben willst!

Wie kann man auf die Methode der Superklasse zugreifen, nachdem man sie überschrieben hat?

Das Phänomen des Überschreibens wird von der Oberklasse erzeugt und in der Unterklasse abgeschlossen. Im folgenden Code wird erläutert, wie auf eine Methode der Oberklasse nach dem Überschreiben zugegriffen werden kann.

class Autos {
    public void show() {
        System.out.println("Wir haben verschiedene Autos in der Garage");
    }
}
class ElektroAutos extends Autos {
    @Override // Java Override Annotation
    public void show() {
        // Auf die show()-Methode der Oberklasse zugreifen
        super.show();
    }
}
public class Main {
    public static void main(String[] args) {
        ElektroAutos meineElektroAuto = new ElektroAutos();
        meineElektroAuto.show();
    }
}

Im obigen Code,

  • wird eine Oberklasse namens Autos erstellt
  • die Klasse ElektroAutos erbt von Autos
  • das Schlüsselwort super wird in der Unterklasse verwendet, um auf die Methode der Superklasse (Elternklasse) zuzugreifen
  • in der Hauptklasse wird ein Objekt der Klasse Electric erstellt und die dazugehörige show()-Methode wird aufgerufen

Ausgabe auf der Konsole:

Wir können am Method-Overriding erkennen das die Instanzmethode (engl. Instance-Method) die Methode der Oberklasse aufruft!

Aus der Ausgabe geht hervor, dass der Inhalt der Methode der Oberklasse angezeigt wird.

Wie verwendet man Zugriffsmodifikatoren beim Überschreiben in Java?

Die Zugriffsmodifikatoren spielen auch beim Overriding eine wichtige Rolle. So können Entwickler beispielsweise unterschiedliche Zugriffsmodifikatoren für die Methode in der Oberklasse und in der Unterklasse verwenden. Ja, sie können verwendet werden, aber es sind dabei einige Regeln zu beachten. Die folgende Zeile ist die Faustregel in dieser Hinsicht:

Eine Methode in einer Unterklasse muss entweder den höheren oder den gleichwertigen Zugriffsmodifikator im Vergleich zur Methode in der Oberklasse haben.

Wenn zum Beispiel eine Methode in einer Oberklasse als protected deklariert ist, muss dieselbe Methode der Unterklasse entweder mit dem Zugriffsmodifikator public oder protected deklariert werden.  Der folgende Code erzeugt eine Methode einer Unterklasse, die weniger Zugriffsrechte hat als die Methode in der Oberklasse.

class Autos {
    protected void show() {
        System.out.println("Willkommen in unserer Garage!");
    }
}
class ElektroAutos extends Autos {
    @Override // Java Override Annotation
    private void show() {
        System.out.println("Das sind unsere Elektroautos");
    }
}
public class Main {
    public static void main(String[] args) {
        ElektroAutos meinElektroAuto = new ElektroAutos();
        meinElektroAuto.show();
    }
}

In dem obigen Code,

  • wird die Methode der Oberklasse mit dem Schlüsselwort protected deklariert und
  • die Methode der Unterklasse wird mit dem Schlüsselwort private deklariert.

Ausgabe auf der Konsole:

Die Methode (engl. a method) kann nicht überschrieben werden, da der Zugriffsmodifikator niedriger ist!

Da die überschreibende Methode den Zugriffsmodifikator eines geringeren Zugriffs als der der Oberklasse hat, kann die Methode nicht überschrieben werden.

Zusammenfassung: Java Override im Überblick

Das Java Overriding tritt auf, wenn die Methode der Oberklasse in der Unterklasse mit demselben Namen, Parametern & Eigenschaften verwendet wird. Dabei sollten wir zur besseren Codequalität immer die Java Override Annotation verwenden.



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren

Arrow-up