2016-08-15 1 views
2

Ich lese gerade Dart Sprache Spezifikation und erkunden eine neue interessante Sprache. As Dart language specification says: Dart hat implicit interfaces. Das bedeutet, dass jeder class auch ein interface ist. Also, wenn ich etwas Verhalten einer anderen Klasse implementieren möchte, ist implements Klausel die einzige, die ich brauche.Understanding 'implementiert' und 'mit' in Dart

Außerdem unterstützt Dart mixins. Damit können wir die Implementierung von Methoden aus einer anderen Klasse mit dem Schlüsselwort with übernehmen.

So gegeben, dass, wenn eine abstrakte Klasse A definiert Methode a() wie:

abstract class A { 
    void a(); 
} 

und zwei weitere konkrete Klasse B definiert Verfahren ein(), aber implementiert Klasse nicht A wie:

class B { 
    void a() { 
    print("I am class B"); 
    } 
} 

und Klasse C implementiert Klasse A mit Mixin B wie:

class C extends Object with B implements A { 
    ... 
} 

Hier habe ich einige questio haben ns darüber. Wenn eine Klasse die Schnittstelle implementiert und auch Mixin verwendet, das über eine Methodenimplementierung mit demselben Methodennamen verfügt; würde es nicht cycling inheritance möglich machen? Wie wird das Verhalten von class C sein? Muss es implementiert werden a() oder es wird implizit von mixin B implementiert werden?

Ich lerne gerade Dart und Konzepte wie Mixins sind mir sehr fremd. Kann mir jemand helfen, meine Fragen zu beantworten?

+0

Hoffe, dass es Ihnen nichts ausmacht, aber behoben Ihre Proben, um korrekt zu sein Dart –

+0

@ArggentiApparatus Also, wenn ich Mixin verwenden mit Klausel ist diese Klasse beschränkt Objekt zu erweitern? Ich habe es irgendwo gelesen, aber ich habe es nicht verstanden. Kannst du bitte etwas über deine Bearbeitung ausarbeiten? –

+0

Sie haben geschrieben: Klasse C implementiert A mit B {...} 'Die korrekte Syntax lautet' Klasse Klassenname erweitert Basisklasse mit Mixinclass implementiert Schnittstelle {...} '. * Jede * Klasse kann erweitert werden. Es gibt Einschränkungen für Klassen, die jedoch als Mixins verwendet werden können. Ich schlage vor, den Abschnitt "Sprachreise" im Unterricht zu lesen, um besser zu verstehen –

Antwort

1

Mixins sind eine Art begrenzte Mehrfachvererbung. Mit C with B erbt C eine Implementierung von void a(). Hinzufügen implements A braucht nichts mehr zu tun, denn C erfüllt bereits den Vertrag, den es durch implements A, wegen B erfüllen soll.

2

Ihr Link ist zu der Language Tour, nicht die specification, aber die Tour ist definitiv, was Sie lesen sollten, um mit zu beginnen.

Ihr Beispiel ist in Ordnung. fügt im Prinzip die Mitglieder von B zu Object hinzu, um C zu erstellen. Wenn C dann die Schnittstelle A erfüllt, kann es Unterstützung für diese Schnittstelle deklarieren (implements A).