2016-08-15 57 views
2

我剛剛閱讀了Dart語言規範並探索了一種新的有趣的語言。 As Dart language specification says:飛鏢有implicit interfaces。這意味着每個class也是interface。所以,如果我想實現另一個類的某些行爲,implements子句是我唯一需要的。飛鏢中理解'實現'和'與'

另外,Dart支持mixins。這樣我們就可以使用with關鍵字從另一個類實現方法。

因此,考慮到如果一個抽象類A定義的方法A(),如:

abstract class A { 
    void a(); 
} 

和另外兩個具體類B定義方法的(),但不實現類A等:

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

類和C類實現A類與密新b類似:

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

在這裏,我有幾個questio恩關於它。如果一個類實現了接口,並且使用具有相同方法名的方法實現的mixin;這不會使cycling inheritance成爲可能嗎? class C會怎樣?它是否需要執行a()或者它將由mixin B隱含實施?

我只是學習飛鏢和像mixin這樣的概念對我來說很陌生。任何人都可以通過回答我的問題來幫助我理解嗎?

+0

希望你不介意,但修正你的樣本是否正確Dart –

+0

@ArgentiApparatus那麼,如果我使用mixin使用with子句是那個類限制擴展Object?我在某處讀過它,但沒有明白。你能否詳細說明一下你的編輯? –

+0

您編寫了'class C implements B with B {...}'正確的語法是'class Classname extends Mixinclass implements Interface {...}'擴展Baseclass。 *任何*課程可能會延長。雖然可以用作mixin的類有一些限制。我建議閱讀關於課程的語言遊覽部分以便更好地理解 –

回答

1

Mixins是一種有限的多重繼承。通過C with BC繼承了void a()的實現。增加implements A不需要做任何事情,因爲C已履行合同它聲稱履行implements A,因爲B

2

您的鏈接是語言導覽,而不是specification,但巡迴演唱會絕對是你應該閱讀的開始。

你的例子很好。 class C extends Object with B { ... }基本上將B的成員添加到Object以創建C.如果C滿足接口A,則它可以聲明對該接口的支持(implements A)。