Menu
Coddy logo textTech

Überschreiben von Methoden (@Override)

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 22 von 87.

Methodenüberschreibung ermöglicht es einer Unterklasse, ihre eigene Implementierung einer Methode bereitzustellen, die bereits in ihrer übergeordneten Klasse definiert ist. Auf diese Weise können Kindklassen das geerbte Verhalten an ihre spezifischen Anforderungen anpassen.

Wenn du eine Methode überschreibst, ersetzt die Version der Unterklasse die Version der Elternklasse für Objekte dieser Unterklasse vollständig. Die Methode muss denselben Namen und dieselben Parameter wie die Methode der Elternklasse sowie einen Rückgabetyp haben, der mit dem der Elternklasse identisch ist (oder ein Untertyp davon):

public class Animal {
    public void makeSound() {
        System.out.println("Some generic sound");
    }
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow!");
    }
}

Die Annotation @Override teilt dem Compiler mit, dass du beabsichtigst, eine Methode der übergeordneten Klasse zu überschreiben. Obwohl sie optional ist, wird sie dringend empfohlen, da der Compiler Fehler erkennt, wenn du versehentlich den Methodennamen falsch schreibst oder die falschen Parameter verwendest:

@Override
public void makeSound() { }  // Korrekt – der Compiler überprüft dies

public void makesound() { }  // Tippfehler! Erstellt eine neue Methode, anstatt zu überschreiben

Wenn du eine überschriebene Methode aufrufst, führt Java die Version aus, die zum tatsächlichen Objekttyp gehört:

Dog dog = new Dog();
dog.makeSound();  // Ausgabe: Woof!

Cat cat = new Cat();
cat.makeSound();  // Ausgabe: Meow!

Denke an die vorherige Lektion zurück: Du kannst super.methodName() innerhalb einer überschriebenen Methode verwenden, wenn du das Verhalten des übergeordneten Elements zusammen mit deinem neuen Code weiterhin einbeziehen möchtest.

challenge icon

Aufgabe

Einfach

Lass uns ein Benachrichtigungssystem erstellen, das demonstriert, wie Unterklassen Methoden der übergeordneten Klasse überschreiben können, um ihr eigenes spezialisiertes Verhalten bereitzustellen. Du wirst sehen, wie die Annotation @Override dabei hilft, Fehler zu erkennen, und wie jede Unterklasse geerbte Methoden anpassen kann.

Du wirst drei Dateien erstellen, um deinen Code zu organisieren:

  • Notification.java: Erstelle die übergeordnete Klasse, die eine allgemeine Benachrichtigung darstellt. Sie sollte Folgendes enthalten:
    • Ein privates Feld für die message (String)
    • Einen Konstruktor, der die Nachricht entgegennimmt
    • Eine Methode getMessage(), die die Nachricht zurückgibt
    • Eine Methode send(), die Folgendes ausgibt: Sending notification: [message]
  • EmailNotification.java: Erstelle eine Unterklasse, die Notification erweitert und anpasst, wie Benachrichtigungen per E-Mail gesendet werden:
    • Ein privates Feld für die E-Mail-Adresse des recipient (String)
    • Einen Konstruktor, der sowohl die Nachricht als auch den Empfänger entgegennimmt und super(message) für den Teil der übergeordneten Klasse verwendet
    • Überschreibe die Methode send() mithilfe der Annotation @Override, sodass Folgendes ausgegeben wird: Emailing [recipient]: [message]
  • Main.java: Demonstriere, wie derselbe Methodenname je nach Objekttyp unterschiedliches Verhalten erzeugt. Du erhältst zwei Eingaben: eine Nachricht und eine E-Mail-Adresse. Erstelle sowohl eine reguläre Notification als auch eine EmailNotification mit derselben Nachricht und rufe anschließend bei beiden send() auf, um die unterschiedlichen Ausgaben zu sehen.

Du erhältst zwei Eingaben: die Nachricht (String) und die E-Mail-Adresse des Empfängers (String).

Deine Ausgabe sollte zwei Zeilen enthalten – zuerst die der Methode send() der übergeordneten Klasse und anschließend die der überschriebenen Version in EmailNotification. Dies demonstriert, wie das Überschreiben von Methoden es Unterklassen ermöglicht, geerbtes Verhalten durch ihre eigene Implementierung zu ersetzen.

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Eingaben lesen
        String message = scanner.nextLine();
        String recipient = scanner.nextLine();
        
        // TODO: Create a Notification object with the message
        
        // TODO: Create an EmailNotification object with the message and recipient
        
        // TODO: Call send() on the Notification object
        
        // TODO: Call send() on the EmailNotification object
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Java-Compiler