Dart学习笔记(十七)

101 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Dart implements实现多个接口

Dart中一个类实现多个接口

代码如下:


abstract class A {

 

  late String name;

 

  printA();

 

}

 

abstract class B {

 

  printB();

 

}

 

class C implements A,B {

 

  @override

 

  late String name;

 

@override

 

  printA() {

 

    // TODO: implement printA

 

    print('printA');

 

  }

 

  @override

 

  printB() {

 

    // TODO: implement printB

 

    print('printB');

 

  } 

 

}

 

main() {

 

  C c = new C();

 

  c.printA(); // printA

 

  c.printB(); // printB

 

}

Dart mixins 继承 类型

mixins的中文意思是混入,就是在类中混入其他功能。

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

因为Dart中mixins使用的条件,随着Dart版本一直在变,这里讲的是Dart2.x中使用mixins的条件:

1.  Dart2.x中作为mixins的类只能继承自Object,不能继承其他类

1.  Dart2.x中作为mixins的类不能有构造函数

1.  Dart2.x中一个类可以mixins多个mixins类

1.  Dart2.x中mixins绝不是继承,也不是接口,而是一种全新的特性

mixins

代码如下:


class A {

 

  String info = 'this is A';

 

  void printA () {

 

    print('printA');

 

  }

 

}

 

class B {

 

  void printB () {

 

    print('printB');

 

  }

 

}

 

class C with A,B {

 

}

 

main() {

 

  C c = new C();

 

  c.printA(); // printA

 

  c.printB(); // printB

 

  print(c.info); // this is A

 

}

Dart mixins  继承 

代码如下:


// 父类

class Person {

 

  String name;

 

  int age;

 

  Person(this.name, this.age);

 

  void printInfo() {

 

    print('${this.name} --- ${this.age}');

 

  }

 

  void run() {

 

    print('Person run');

 

  }

 

}

 

class A {

 

  String info = 'this is A';

 

  void printA() {

 

    print('printA');

 

  }

 

  void run() {

 

    print('A run');

 

  }

 

}

 

class B {

 

  void printB() {

 

    print('printB');

 

  }

 

  void run() {

 

    print('B run');

 

  }

 

}

 

// 写法一 Person类里不能写构造函数

 

// class C with Person,A,B {

 

// }

 

// 写法二 Person类里可以写构造函数

 

class C extends Person with B, A {

 

  C(String name, int age) : super(name, age);

 

}

 

main() {

 

  C c = new C('张三', 20);

 

  c.printA(); // printA

 

  c.printB(); // printB

 

  print(c.info); // this is A

 

  c.printInfo();

 

  c.run(); // A run

 

}

Dart minxins的实例类型: 其超类的子类型 

代码如下:


class A {

  String info = 'this is A';

  void printA () {

    print('printA');

  }

}

 

class B {

  void printB () {

    print('printB');

  }

}

 

class C with A,B {

 

}

 

main() {

  /** A类和B类 是 C类 的超类 */

  C c = new C();

 

  print(c is C); // true

  print(c is A); // true

  print(c is B); // true

 

  var a = new A();

  print(a is Object); // true

}