谷歌Dart支持混合功能吗?

12

我已经浏览了语言文档,似乎Google Dart不支持混入(接口中没有方法体,没有多重继承,也没有类似Ruby的模块)。 我是正确的吗?还是Dart有其他实现混入功能的方式?


您可能希望更新为当前正确的答案 :) - Răzvan Flavius Panda
2个回答

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};  
  }  
 } 

混合定义的限制包括:

  • 不能声明构造函数
  • 超类是Object
  • 不包含对super的调用

一些额外的阅读材料:


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接