Implementiert v / s Erweitert v / s mit Schlüsselwörtern in Dart

In diesem Beitrag werden Anwendungsfälle für Implementierungen, Erweiterungen und mit Schlüsselwörtern behandelt. Implementiert v / s Erweitert v / s Mit Schlüsselwörtern in Dart.

Einführung

Wenn Sie eine Flutter-Anwendung entwickeln, sollten Sie viele Anwendungsfälle für implements , extends und with keywords gesehen haben. Für jemanden, der noch nie mit Dart gearbeitet hat, ist der Unterschied zwischen diesen Schlüsselwörtern nicht offensichtlich.

In diesem Beitrag werden wir uns eingehend mit diesen Schlüsselwörtern befassen, um unser Verständnis von Flutter und Dart zu erweitern.

Implements Dient zum Erzwingen des Verhaltens über die Schnittstelle

In OOP erzwingt eine Schnittstelle, dass die ableitende Klasse eine festgelegte Liste öffentlicher Felder und Methoden implementiert.

Aber im Gegensatz zu anderen traditionellen Programmiersprachen wie C # und JAVA hat Dart keine expliziten Schnittstellentypen. Jede Klasse definiert standardmäßig eine eigene Schnittstelle, die aus öffentlichen Feldern und Methoden besteht. So kann jede Klasse als Schnittstelle in Dart fungieren.

Wir verwenden das Schlüsselwort implements , um eine Schnittstelle zu implementieren. Außerdem kann eine Klasse mehrere Schnittstellen implementieren.

Dart Beispiel 1 Implementiert

Im obigen Beispiel implementiert Klasse D die Klassen A, B und C, daher muss sie die öffentlichen Methoden und Felder dieser Klassen implementieren.

Da Dart keine expliziten Schnittstellen hat, verwenden wir die abstrakte Klasse als Schnittstelle.

abstract class X { doX();} class Y implements X { @override doX() { // TODO: implement doX return null; }}

Erweitert ist für das Teilen von Verhalten über Vererbung

In OOP impliziert Vererbung das Teilen von Verhalten zwischen Klassen. Wir können keine Funktionen mit einer Schnittstelle teilen. Wenn wir also eine Klasse implementieren, können wir ihr Verhalten nicht teilen.

Dieses Beispiel Erweitert

Im obigen Beispiel können Sie sehen, dass Klasse B eine eigene Implementierung der doA() -Methode bereitstellen muss, da das Verhalten nicht gemeinsam genutzt wird.

Wenn Sie das Verhalten für diese beiden Klassen freigeben möchten, sollten Sie das Schlüsselwort extends .

class A { doA() { print('A'); }}class B extends A { }main() { var b = B(); b.doA();}

Da B im obigen Beispiel A erweitert, können Sie die doa() -Methode direkt aus dem Objekt von B aufrufen.

Im Gegensatz zur Implementierung mehrerer Schnittstellen unterstützt Dart nur eine einzelne Vererbung. Sie können also nicht aus mehreren Klassen erweitern.

class A { doA() { print('A'); }}class B { doB() { print('B'); }}// Not Allowed!class C extends A, B {}

WithIs For Mixin

In OOP ist ein Mixin eine Klasse, die Methoden zur Verwendung durch andere Klassen enthält. Im Gegensatz zum Schnittstellen- und Vererbungsansatz muss ein Mixin nicht die übergeordnete Klasse dieser anderen Klassen sein.

Ein Mixin erzwingt also weder eine Nutzungsbeschränkung noch eine Typbeschränkung.

Sie werden normalerweise allgemeine Funktionen in ein Mixin einfügen. In Dart verwenden wir das Mixin mit dem Schlüsselwort with .

Zum Beispiel Mit

Wie im obigen Beispiel gezeigt, kann die Implementierung von Mixin-Feldern bei Bedarf überschrieben werden. Darüber hinaus kann eine Klasse mehrere Mixins verwenden.

Noch ein paar Dinge über Mixin zu beachten

Verwenden einer Klasse als Mixin

In Dart kann eine Klasse auch als Mixin verwendet werden, wenn die Klasse konstruktorlos ist. Zum Beispiel ist der folgende Code gültig.

class D { doD() { print('d'); }}class E with D {}main() { var e = E(); e.doD();}

Aber dieser unten ist ungültig, weil Klasse D einen Konstruktor deklariert.

class D { D() { } doD() { print('d'); }}class E with D {}

Mixin für bestimmte Typen erzwingen

Sie können auch erzwingen, dass ein Mixin nur für bestimmte Typklassen verwendet werden kann, indem Sie beim Definieren des Mixins das Schlüsselwort on verwenden.

mixin Z on D { doZ() { }}class D { doD() { print('d'); }}//Can't do this!class E with Z {}//Can do this!class F extends D with Z {}

Fazit

In diesem Beitrag lernten wir die Anwendungsfälle für implements, extends und mit Schlüsselwörtern bei der Entwicklung von Flutter / Dart-Anwendungen kennen.

Implementiert v/s Erweitert v/s Mit

Um die Verwendung zusammenzufassen:

  • Implementiert zum Erzwingen von Verhalten.
  • Erweitert für das Teilen von Verhalten einer einzelnen Klasse.
  • Mixins zum Teilen von Verhalten aus mehreren wiederverwendbaren Typen.

Erfahren Sie mehr:

  • Dart-Sprachfunktionen
  • Lerne flattern

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.