2016-08-15 4 views
2

ダーツの言語仕様を読んで興味深い新しい言語を探そうとしています。 As Dart language specification says:ダーツはimplicit interfacesです。つまり、classはすべてinterfaceです。だから、私は別のクラスのいくつかの動作を実装したい場合は、implements節だけが必要です。ダーツで 'implements'と 'with'を理解する

また、Dartはmixinsをサポートしています。そこで、withというキーワードを使って別のクラスのメソッドを実装することができます。

したがって、与えられた抽象クラスAは、メソッドを定義する場合()のような:

abstract class A { 
    void a(); 
} 

と別の2つの具象クラスBは、メソッドを()を定義しかしようなクラス実装しない:

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

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

、私はいくつかのquestioを持っている:

、クラスCは次のようにミックスインBでクラスAを実装しますそれについてのns。クラスがインタフェースを実装し、同じメソッド名を持つメソッド実装を持つmixinも使用する場合。 cycling inheritanceは可能になりませんか? class Cの動作はどのようになりますか? a()を実装する必要がありますか、暗黙的にmixin Bによって実装されますか?

私はダーツを学んでいます。ミックスインのようなコンセプトは、私にはあまり知られていません。私の質問に答えて誰かに理解を助けることができますか?

+0

あなたは気にしないで、あなたのサンプルを修正してください。Dart –

+0

@ArgentiApparatusだから、with節を使ってmixinを使うと、そのクラスはオブジェクトを拡張することに制限されていますか?私はどこかでそれを読んだが、それを理解していなかった。あなたの編集について何か詳細を教えていただけますか? –

+0

'class CはAとB {...}を実装しています。正しい構文は' class Classname extends Mixinclass extends Interface class {...} 'です。 *どんなクラスも拡張することができます。 mixinsとして使用できるクラスには制限があります。理解を深めるために、クラスの言語ツアーセクションを読むことをお勧めします –

答えて

1

ミックスインは、限定された多重継承の一種です。 C with Bでは、Cvoid a()の実装を継承しています。 implements Aを追加することは、Cimplements Aによって実現すると主張している契約を既に達成しているため、Bのために、これ以上実行する必要はありません。

2

あなたのリンクは言語ツアー、ないspecificationにですが、ツアーでは、あなたが開始するために読むべきものを間違いなくあります。

あなたの例は問題ありません。 class C extends Object with B { ... }は、基本的にBのメンバーをObjectに追加してCを作成します.CがインターフェイスAを満たしていれば、そのインターフェイス(implements A)のサポートを宣言できます。

関連する問題