Ich möchte den Unterschied zwischen verstehen extends
, implements
und with
. Wann verwende ich jedes Schlüsselwort?
Verwenden Sie Erweitert, um eine Unterklasse zu erstellen, und Super, um auf die Oberklasse zu verweisen.
Extends
ist die typische Vererbung von OOP- Klassen. Wenn Klasse eine Klasse erweitert b alle Eigenschaften, Variablen in der Klasse implementierten Funktionen b ist auch in der Klasse zur Verfügung ein . Zusätzlich können Sie Funktionen usw. überschreiben.
Sie verwenden, extend
wenn Sie eine spezifischere Version einer Klasse erstellen möchten. Zum Beispiel der Klasse Auto könnte die Klasse erweitert Fahrzeug . In Dart kann eine Klasse nur eine Klasse erweitern.
Jede Klasse definiert implizit eine Schnittstelle, die alle Instanzmitglieder der Klasse und alle von ihr implementierten Schnittstellen enthält. Wenn Sie eine Klasse A erstellen möchten, die die API von Klasse B unterstützt, ohne die Implementierung von B zu erben, sollte Klasse A die B-Schnittstelle implementieren.
Implements
kann verwendet werden, wenn Sie eine eigene Implementierung einer anderen Klasse oder Schnittstelle erstellen möchten. Wenn Klasse a Klasse b implementiert . Alle in Klasse b definierten Funktionen müssen implementiert werden.
Wenn Sie eine andere Klasse implementieren, erben Sie keinen Code von der Klasse. Sie erben nur den Typ. In Dart können Sie das implements
Schlüsselwort mit mehreren Klassen oder Schnittstellen verwenden.
Mixins sind eine Möglichkeit, den Code einer Klasse in mehreren Klassenhierarchien wiederzuverwenden.
With
wird verwendet, um Mixins einzuschließen. Ein Mixin ist eine andere Art von Struktur, die nur mit dem Schlüsselwort verwendet werden kannwith
.
Sie werden in Flutter verwendet, um allgemeine Codefragmente einzuschließen. Ein häufig verwendetes Mixin ist das SingleTickerProviderStateMixin .
extends
kann nicht für Mehrfachvererbung verwendet werden? Könnten Sie bitte erklären, dass "jede Klasse implizit eine Schnittstelle definiert, die alle Instanzmitglieder der Klasse und alle von ihr implementierten Schnittstellen enthält"? Was passiert, wenn ich SingleTickerProviderStateMixin erweitere? anstatt mit zu verwenden?implement
Klassen, sondern nurimplement
Schnittstellen. Eine Schnittstelle enthält nur Funktions- und Variablendefinitionen, jedoch keine Implementierung. InDart
jeder Klasse gibt es automatisch eine Schnittstelle, die alle Definitionen enthält. Daher können Sie auchimplements
mit Klassen verwenden.extends
kann nur mit einer einzigen Klasse verwendet werden.with
Schlüsselwort mit einer Klasse anstelle eines Mixins verwenden würde? Der Compiler beschwert sich NICHT.extend
kann zu der Zeit nur mit einer einzelnen Klasse verwendet werden, ABER ... Sie können leicht eine Klasse erweitern, die eine andere Klasse erweitert, die eine andere Klasse erweitert, die ...! ;)Tatsächlich sind die meisten Flutter-Widgets bereits so aufgebaut.
quelle