Menu
Coddy logo textTech

Methodenüberschreibung

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 38 von 110.

Methodenüberschreibung tritt auf, wenn eine Kindklasse ihre eigene Implementierung einer Methode bereitstellt, die bereits in der Elternklasse existiert. Dadurch können Unterklassen das geerbte Verhalten anpassen und dabei dieselbe Methodensignatur beibehalten.

Wenn du in einer Kindklasse eine method mit demselben Namen und denselben Parametern wie in der parent-Klasse definierst, übernimmt die Version der Kindklasse:

class Animal {
  String name;
  
  Animal(this.name);
  
  void speak() {
    print('$name makes a sound');
  }
}

class Dog extends Animal {
  Dog(String name) : super(name);
  
  void speak() {
    print('$name barks: Woof!');
  }
}

void main() {
  var animal = Animal('Generic');
  var dog = Dog('Buddy');
  
  animal.speak();  // Generic macht ein Geräusch
  dog.speak();     // Buddy bellt: Wuff!
}

Wenn du speak() für eine Instanz von Dog aufrufst, führt Dart die Version von Dog aus, nicht die von Animal. Die Kindklasse hat die Methode der Elternklasse überschrieben.

Du kannst das Überschreiben auch mit super kombinieren, um das Verhalten des übergeordneten Elements zu erweitern, anstatt es zu ersetzen:

class Cat extends Animal {
  Cat(String name) : super(name);
  
  void speak() {
    super.speak();  // Zuerst die Version der Elternklasse aufrufen
    print('$name also purrs');
  }
}

Mit diesem Muster kannst du auf vorhandener Funktionalität aufbauen. Die wichtigste Regel ist einfach: Dieselbe Methodenbezeichnung und dieselben Parameter in der Kindklasse ersetzen die Implementierung der Elternklasse, wenn sie für Instanzen der Kindklasse aufgerufen werden.

challenge icon

Aufgabe

Einfach

Lass uns ein Benachrichtigungssystem erstellen, das zeigt, wie Kindklassen Methoden der Elternklasse überschreiben können, um das Verhalten anzupassen. Du erstellst verschiedene Benachrichtigungstypen, die Nachrichten jeweils auf ihre eigene Weise übermitteln.

Du organisierst deinen Code in zwei Dateien:

  • notification.dart: Definiere deine Benachrichtigungshierarchie hier:
    • Eine Notification-Klasse (die Elternklasse) mit einem String title und einem String message. Füge einen Konstruktor hinzu, der beide Werte übernimmt, sowie eine Methode send(), die Notification: [title] - [message] ausgibt
    • Eine EmailNotification-Klasse, die Notification erweitert und eine Eigenschaft String recipient hinzufügt. Überschreibe die send()-Methode, sodass sie Sending email to [recipient]: [title] - [message] ausgibt
    • Eine PushNotification-Klasse, die Notification erweitert und eine Eigenschaft String deviceId hinzufügt. Überschreibe die send()-Methode, sodass sie zuerst mit super die send()-Methode der Elternklasse aufruft und anschließend in der nächsten Zeile Pushed to device: [deviceId] ausgibt
  • main.dart: Importiere deine Benachrichtigungsdatei und demonstriere das Überschreiben von Methoden in Aktion:
    • Erstelle eine Notification als Basis mit dem Titel 'Alert' und der Nachricht 'System update available'
    • Rufe ihre send()-Methode auf
    • Gib eine leere Zeile aus
    • Erstelle eine EmailNotification mit dem Titel 'Welcome', der Nachricht 'Thanks for signing up!' und dem Empfänger 'user@example.com'
    • Rufe ihre send()-Methode auf
    • Gib eine leere Zeile aus
    • Erstelle eine PushNotification mit dem Titel 'Reminder', der Nachricht 'Meeting in 10 minutes' und der deviceId 'DEVICE-001'
    • Rufe ihre send()-Methode auf

Beachte, wie EmailNotification das Verhalten der Elternklasse vollständig ersetzt, während PushNotification es erweitert, indem es zuerst super.send() aufruft. Beide Ansätze sind gültige Möglichkeiten zum Überschreiben von Methoden, je nach deinen Anforderungen.

Erwartete Ausgabe:

Notification: Alert - System update available

Sending email to user@example.com: Welcome - Thanks for signing up!

Notification: Reminder - Meeting in 10 minutes
Pushed to device: DEVICE-001

Probier es selbst

import 'notification.dart';

void main() {
  // TODO: Create a base Notification with title 'Alert' and message 'System update available'
  // Rufe seine send()-Methode auf

  // TODO: Gib eine leere Zeile aus

  // TODO: Erstelle eine EmailNotification mit:
  // - title: 'Welcome'
  // - message: 'Thanks for signing up!'
  // - recipient: 'user@example.com'
  // Rufe seine send()-Methode auf

  // TODO: Gib eine leere Zeile aus

  // TODO: Erstelle eine PushNotification mit:
  // - title: 'Reminder'
  // - message: 'Meeting in 10 minutes'
  // - deviceId: 'DEVICE-001'
  // Rufe seine send()-Methode auf
}
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-Dart-Compiler