Menu
Coddy logo textTech

Das Schlüsselwort super

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

Das Schlüsselwort super gibt einer Kindklasse direkten Zugriff auf ihre Elternklasse. Sie haben es bereits in Konstruktoren mit super(name) gesehen, aber es ist auch in anderen Kontexten nützlich.

Wenn Sie den Konstruktor der Elternklasse aufrufen müssen, übergibt super Argumente in der Vererbungskette nach oben:

class Vehicle {
  String brand;
  int year;
  
  Vehicle(this.brand, this.year);
}

class Car extends Vehicle {
  int doors;
  
  Car(String brand, int year, this.doors) : super(brand, year);
}

Das Schlüsselwort super ermöglicht es Ihnen außerdem, auf Methoden und Eigenschaften der Elternklasse aus der Kindklasse heraus zuzugreifen. Dies ist besonders nützlich, wenn Sie das Verhalten der Elternklasse zusammen mit Ihrem eigenen verwenden möchten:

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

class Cat extends Animal {
  Cat(String name) : super(name);
  
  void makeSound() {
    super.makeSound();  // Zuerst die Methode der Elternklasse aufrufen
    print('$name says meow!');
  }
}

Wenn Sie super.makeSound() aufrufen, rufen Sie explizit die Version der Methode der Elternklasse auf. Ohne super würde der Aufruf von makeSound() auf die Methode der aktuellen Klasse verweisen, was potenziell zu einer unendlichen Rekursion führen kann.

Betrachten Sie super als eine Anweisung, die besagt: „Verwende die Version meiner Elternklasse“ – egal, ob es sich dabei um einen Konstruktor, eine Methode oder eine Eigenschaft handelt.

challenge icon

Aufgabe

Einfach

Wir erstellen ein Nachrichtensystem, das demonstriert, wie das Schlüsselwort super untergeordnete Klassen auf das Verhalten ihrer übergeordneten Klasse zugreifen und dieses erweitern lässt. Du erstellst eine Hierarchie, in der verschiedene Nachrichtentypen auf einer Basisklasse für Nachrichten aufbauen.

Du organisierst deinen Code in zwei Dateien:

  • message.dart: Definiere hier deine Nachrichtenklassen:
    • Eine Message-Klasse (die übergeordnete Klasse) mit einem String sender und einem String content. Füge einen Konstruktor hinzu, der beide Werte entgegennimmt, sowie eine Methode display(), die From [sender]: [content] ausgibt.
    • Eine UrgentMessage-Klasse, die Message erweitert. Sie sollte eine zusätzliche Eigenschaft String priority besitzen. Der Konstruktor nimmt sender, content und priority entgegen und übergibt die ersten beiden mithilfe von super an die übergeordnete Klasse. Überschreibe die display()-Methode, sodass sie zuerst die Version der übergeordneten Klasse mit super.display() aufruft und anschließend in der nächsten Zeile Priority: [priority] ausgibt.
  • main.dart: Importiere deine Nachrichtendatei und demonstriere, wie super sowohl in Konstruktoren als auch in Methoden funktioniert:
    • Erstelle eine reguläre Message von 'Alice' mit dem Inhalt 'Hello there!'.
    • Rufe ihre display()-Methode auf.
    • Gib zur Trennung eine leere Zeile aus.
    • Erstelle eine UrgentMessage von 'Bob' mit dem Inhalt 'Server is down!' und der Priorität 'HIGH'.
    • Rufe ihre display()-Methode auf.

Beachte, wie UrgentMessage super auf zwei Arten verwendet: im Konstruktor, um Daten an die übergeordnete Klasse zu übergeben, und in der überschriebenen Methode, um die Ausgabe der übergeordneten Klasse einzubinden, bevor die eigene Ausgabe hinzugefügt wird.

Erwartete Ausgabe:

From Alice: Hello there!

From Bob: Server is down!
Priority: HIGH

Probier es selbst

import 'message.dart';

void main() {
  // TODO: Erstelle eine reguläre Message von 'Alice' mit dem Inhalt 'Hello there!'
  
  // TODO: Rufe die display() Methode für die Nachricht auf
  
  // TODO: Gib eine Leerzeile zur Trennung aus
  
  // TODO: Erstelle eine UrgentMessage von 'Bob' mit dem Inhalt 'Server is down!' und der Priorität 'HIGH'
  
  // TODO: Rufe die display() Methode für die dringende Nachricht 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