Mixins

Mixins(混入功能)相当于多继承,也就是说可以继承多个类,使用with关键字来实现Mixins的功能。

那么多个类中有相同的方法时候,会被覆盖吗?覆盖的先后是什么?

class A{
  void a(){
    print("A.a()...");
  }
}

class B{

  void a(){
    print("B.a()...");
  }

  void b(){
    print("B.b()...");
  }
}

现在新建一个类D,使得D继承A和B

// 类D 继承A和B 
class D  extends A with B{

}

执行:

void main() {
  var d = new D();
  d.a();
}

输出:

B.a()...

 

如果我们改变A 和B 顺序,如下

// 类D 继承A和B,B在前A在后
class D  extends B with A{

}

再次执行

void main() {
  var d = new D();
  d.a();
}

输出:

A.a()...

 

说明了:后面的类中的方法将前面的类中相同的方法覆盖

我们再验证三个类的情况:

新建类 C

class C{

  void a(){
    print("C.a()...");
  }

  void b(){
    print("C.b()...");
  }

  void c(){
    print("C.c()...");
  }
}

 

修改类D 

// 类D 继承A、B、C,A,C在前 ,B在最后
class D  extends A with C,B{

}

再次执行

void main() {
  var d = new D();
  d.a();
}

输出:

B.a()...

再次说明:后面的类中的方法将前面的类中相同的方法覆盖。

综上,Dart中使用Mixins,可以达到多继承的效果,后面的类中的方法将前面的类中相同的方法覆盖

 

 

Dart学习系列文章:https://www.cnblogs.com/jukaiit/category/1636484.html

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/jukaiit/p/12260252.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!