Menu
Coddy logo textTech

Mehrere Interfaces

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

Einer der größten Vorteile von Interfaces gegenüber Vererbung ist, dass eine Klasse mehrere Interfaces implementieren kann. Während Dart dich darauf beschränkt, nur eine Klasse zu erweitern, kannst du so viele Interfaces implementieren, wie du benötigst.

abstract class Printable {
  void printContent();
}

abstract class Saveable {
  void save();
}

abstract class Shareable {
  void share(String recipient);
}

class Document implements Printable, Saveable, Shareable {
  String content;
  
  Document(this.content);
  
  @override
  void printContent() {
    print('Printing: $content');
  }
  
  @override
  void save() {
    print('Saving document...');
  }
  
  @override
  void share(String recipient) {
    print('Sharing with $recipient');
  }
}

Bei der Implementierung mehrerer Schnittstellen müssen Sie Implementierungen für alle Methoden jeder Schnittstelle bereitstellen. Die Klasse muss alle Verträge erfüllen, die sie zu unterstützen verspricht.

Sie können auch extends mit mehreren implements kombinieren:

class Report extends Document implements Printable, Shareable {
  Report(String content) : super(content);
  
  // Muss weiterhin alle Interface-Methoden implementieren
  // (in diesem Fall bereits von Document geerbt)
}

Diese Flexibilität ermöglicht es Ihnen, Klassen zu entwerfen, die in mehrere Rollen passen. Ein SmartPhone könnte die Schnittstellen Camera, Phone und MusicPlayer implementieren und damit versprechen, dass es alles kann, was jede Schnittstelle erfordert, während es seine eigene, einzigartige Implementierung beibehält.

challenge icon

Aufgabe

Einfach

Erstellen wir ein intelligentes Gerätesystem, das veranschaulicht, wie eine einzelne Klasse mehrere Schnittstellen implementieren kann, um verschiedene Fähigkeiten zu kombinieren. Du erstellst separate Schnittstellenklassen für die verschiedenen Gerätefunktionen und baust anschließend ein Gerät, das all dies kann.

Du organisierst deinen Code in zwei Dateien:

  • devices.dart: Definiere hier deine Schnittstellen und die implementierende Klasse:
    • Eine Connectable-Klasse mit einer Methode connect(), die Connecting to network... ausgibt
    • Eine Chargeable-Klasse mit einer Methode charge(), die Charging battery... ausgibt
    • Eine Displayable-Klasse mit einer Methode showScreen(String content), die Displaying: [content] ausgibt
    • Eine Tablet-Klasse, die alle drei Schnittstellen implementiert: Connectable, Chargeable und Displayable. Füge eine String brand-Eigenschaft mit einem Konstruktor hinzu. Deine Implementierungen sollten bei connect [brand] tablet connecting to WiFi, bei charge [brand] tablet charging via USB-C und bei showScreen [brand] screen: [content] ausgeben
  • main.dart: Importiere deine Gerätedatei und zeige, wie das Tablet alle drei Schnittstellenverträge erfüllt:
    • Erstelle ein Tablet mit der Marke 'Galaxy'
    • Rufe connect() auf
    • Rufe charge() auf
    • Rufe showScreen('Welcome Home') auf

Deine Tablet-Klasse muss für jede Methode aus allen drei Schnittstellen eine eigene Implementierung bereitstellen. Dies zeigt, wie die Implementierung mehrerer Schnittstellen es einer einzelnen Klasse ermöglicht, mehrere Fähigkeiten zu versprechen, während jede Implementierung für das Gerät einzigartig bleibt.

Erwartete Ausgabe:

Galaxy tablet connecting to WiFi
Galaxy tablet charging via USB-C
Galaxy screen: Welcome Home

Probier es selbst

import 'devices.dart';

void main() {
  // TODO: Erstelle ein Tablet mit der Marke 'Galaxy'
  
  // TODO: Rufe connect() auf
  
  // TODO: Rufe charge() auf
  
  // TODO: Rufe showScreen('Welcome Home') 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