文章

一个类实现多接口_Mixins

一个类实现多接口/Mixins

一个类实现多接口_Mixins

一个类实现多接口/Mixins

实现多个接口

需要实现多个接口的属性和方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
abstract class A {
  String name = '';
  printA();
}

abstract class B {
  printB();
}

// 实现多个接口 - 需要实现A、B的属性和方法
class C implements A,B {
  @override
  String name = '';

  @override
  printA() {
    print('A');
  }

  @override
  printB() {
    print('B');
  }
}

main() {
  C c = new C();
  c.printA(); // A
}

Mixins

Mixins的中文意思是“混入”,就是在类中混入其它功能;

在Dart中可以使用 mixins 实现类似多继承的功能。

Dart 是不支持多继承的,但是它支持 mixin,简单来讲 mixin 可以 “组合” 多个类,这样就极大的减少了代码冗余。mixin是面向对象程序设计语言中的类,提供了方法的实现。其他类可以访问mixin类的方法、变量而不必成为其子类。简而言之,mixins是普通的类,我们可以从中扩展方法(或变量)而不扩展类。

定义一个 Person 类,实现吃饭、说话、走路和写代码功能,同时定义一个 Dog 类,实现吃饭、和走路功能。我们定义了几个 mixin,然后通过 with 关键字将它们组合成不同的类。有一点需要注意:如果多个mixin 中有同名方法,with 时,会默认使用最后面的 mixin 的,mixin 方法中可以通过 super 关键字调用之前 mixin 或类中的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Person {
  say() {
    print('say');
  }
}

mixin Eat {
  eat() {
    print('eat');
  }
}

mixin Walk {
  walk() {
    print('walk');
  }
}

mixin Code {
  code() {
    print('key');
  }
}

class Dog with Eat, Walk{}
class Man extends Person with Eat, Walk, Code{}

main() {
  Man m = new Man();
  m.eat(); // eat
}
本文由作者按照 CC BY 4.0 进行授权