Menu
Coddy logo textTech

Die Annotation @override

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

Die Annotation @override ist ein Best-Practice-Marker, der Dart (und anderen Entwicklern) mitteilt, dass du absichtlich eine Methode aus einer übergeordneten Klasse ersetzt. Obwohl das Überschreiben von Methoden auch ohne sie funktioniert, bietet die Verwendung von @override ein wichtiges Sicherheitsnetz.

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

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

Die Annotation bietet zwei wesentliche Vorteile. Erstens dokumentiert sie deine Absicht eindeutig – jeder, der den Code liest, weiß sofort, dass diese Methode in der übergeordneten Klasse vorhanden ist. Zweitens warnt dich der Analyzer von Dart, wenn die Methode der übergeordneten Klasse tatsächlich nicht existiert, und erkennt so Tippfehler und Fehler beim Refactoring frühzeitig.

Überlege, was passiert, wenn du den Methodennamen ohne @override falsch schreibst:

class Cat extends Animal {
  Cat(String name) : super(name);
  
  void speek() {  // Tippfehler! Keine Warnung ohne @override
    print('$name meows');
  }
}

Ohne die Annotation geht Dart davon aus, dass du eine neue Methode namens speek() erstellst. Mit @override würde der Analyzer sofort darauf hinweisen, dass eine solche Methode in der übergeordneten Klasse nicht existiert. Diese einfache Annotation verhindert subtile Fehler, die später schwer nachzuverfolgen sein können.

challenge icon

Aufgabe

Einfach

Erstellen wir ein Mediaplayer-System, das die Bedeutung der Annotation @override beim Anpassen geerbten Verhaltens veranschaulicht. Du wirst verschiedene Medientypen erstellen, die Inhalte jeweils auf ihre eigene Weise abspielen.

Du wirst deinen Code in zwei Dateien organisieren:

  • media.dart: Definiere hier deine Medienhierarchie:
    • Eine Media-Klasse mit einer String title-Eigenschaft, einem Konstruktor, der den Titel entgegennimmt, und einer Methode play(), die Playing: [title] ausgibt
    • Eine Song-Klasse, die Media erweitert und eine String artist-Eigenschaft hinzufügt. Verwende die Annotation @override und überschreibe play(), um Playing song: [title] by [artist] auszugeben
    • Eine Video-Klasse, die Media erweitert und eine int duration-Eigenschaft (in Sekunden) hinzufügt. Verwende @override und überschreibe play(), um zuerst die Version der übergeordneten Klasse mit super.play() aufzurufen und anschließend Duration: [duration] seconds auszugeben
  • main.dart: Importiere deine Mediendatei und demonstriere die überschriebenen Methoden:
    • Erstelle ein Media-Objekt mit dem Titel 'Generic Content' und rufe play() auf
    • Gib eine leere Zeile aus
    • Erstelle einen Song mit dem Titel 'Imagine' und dem Interpreten 'John Lennon' und rufe anschließend play() auf
    • Gib eine leere Zeile aus
    • Erstelle ein Video mit dem Titel 'Dart Tutorial' und der Dauer 360 und rufe anschließend play() auf

Die Annotation @override dokumentiert deine Absicht und hilft dabei, Fehler zu erkennen. Falls du play() versehentlich als plya() falsch schreibst, würde dich die Annotation darauf hinweisen, dass eine solche Methode in der übergeordneten Klasse nicht existiert.

Erwartete Ausgabe:

Playing: Generic Content

Playing song: Imagine by John Lennon

Playing: Dart Tutorial
Duration: 360 seconds

Probier es selbst

import 'media.dart';

void main() {
  // TODO: Create a Media object with title 'Generic Content' and call play()
  
  
  // TODO: Eine leere Zeile ausgeben
  
  
  // TODO: Erstelle einen Song mit dem Titel 'Imagine' und dem Künstler 'John Lennon', dann rufe play() auf
  
  
  // TODO: Eine leere Zeile ausgeben
  
  
  // TODO: Create a Video with title 'Dart Tutorial' and duration 360, then call play()
  
}
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