2011-10-10 64 views
12

我已經瀏覽了language documentation,看來Google Dart不支持mixins(接口中沒有方法體,沒有多重繼承,也沒有Ruby類模塊)。我是對的嗎?還是有另一種方式在Dart中具有mixin-like功能?Google Dart支持mixin嗎?

+0

你可能要更新到當前正確的答案:) –

回答

9

我很高興向大家報告,現在回答是的!

mixin實際上只是子類和超類之間的三角洲。然後,您可以將三角洲「混合」到另一個班級。

例如,考慮這個抽象類:

abstract class Persistence { 
    void save(String filename) { 
    print('saving the object as ${toJson()}'); 
    } 

    void load(String filename) { 
    print('loading from $filename'); 
    } 

    Object toJson(); 
} 

然後,您可以混合到這一點其它類,這樣就避免了繼承樹的污染。

abstract class Warrior extends Object with Persistence { 
    fight(Warrior other) { 
    // ... 
    } 
} 

class Ninja extends Warrior { 
    Map toJson() { 
    return {'throwing_stars': true}; 
    } 
} 

class Zombie extends Warrior { 
    Map toJson() { 
    return {'eats_brains': true}; 
    } 
} 

對混入的定義限制包括:

  • 切不可聲明構造
  • 超類對象
  • 包含超

一些額外的閱讀沒有來電: