Java Override: Die @Override-Annotation in Java!

    Avatarbild von Patrick
    Patrick

    veröffentlicht am: 30.06.2022
    zuletzt aktualisiert am: 05.02.2023

    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.

    😩 Gelangweilt von den Udemy & YouTube-Tutorials?!

    Lerne spielerisch Java und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.

    TP Star TP Star TP Star TP Star TP Star

    "Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."

    - Lennart Sparbier

    100% kostenlos registrieren · keine Kreditkarte notwendig

    👋 Wir warten bereits auf dich!

    Lerne das, was du wirklich brauchst.

    Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.

    Logo von Python
    Logo von PyTorch
    Logo von Pandas
    Logo von Matplotlib
    Logo von Java
    Logo von NumPy
    Mehr erfahren

    100% kostenlos registrieren · keine Zahlungsdaten notwendig