11.Dart-11实现多个接口,以及mixins

/**

* Dart中一个类实现多个接口

*

*

* Mixins的中文意思就是混入, 就是在勒种混入其他功能

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

* 因为mixins使用的条件, 随着Dart版本一直在变,目前写的只是2.x中的

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

*    2.作为mixins的类不能有构造函数

*    3.一个类可以mixins多个mixins类

*    4.mixins 不是继承, 也不是接口, 而是一种新的特性

*

*

* 如果继承的和mixins混合得到的方法或者属性名称有相同的, 那么最后一个混合的类的方法和属性将覆盖前面相同的方法

*/

// 建议使用抽象类定义接口

abstract class A {

  String name;

  printA();

  run() {

    print("xxxxxx");

  }

}

abstract class B {

  printB();

}

main(List<String> args) {

  C c = new C();

  c.printA();

  c.printB();

  c.run();

  D d = new D();

  d.name = "我是通过mixins来获得的";

  d.printA();

  d.printB();

  print("-----------------------------");

  E e = new E("大王");

  e.say();

  e.printA();

  e.printB();

  print(e is A); //true

  print(e is B); //true

  print(e is Person); //true

}

// 使用implements是需要实现接口里面的所有的属性和方法

// 如果需要继承一个抽象类,那么用extends,

// 如果不需要继承,而是需要完全复写接口里面的所有的属性和方法就用implements

class C extends A implements B {

  @override

  String name;

  @override

  printA() {

    print("printA");

  }

  @override

  printB() {

    print("printB");

  }

}

// 使用mixins,  这里面的A, B两个类只能是继承自Object,不能继承自其他类, 同时A,B两个类不能有构造函数

class D with A, B {

  @override

  printA() {

    print("这是使用mixins后获得的name属性 , name =${this.name}");

  }

  @override

  printB() {

    print("B类没有name属性,但是因为mixins了A类, 所有可以用this.name = ${this.name}");

  }

}

class Person {

  String nickname;

  Person(this.nickname);

  say() {

    print("这是${this.nickname}");

  }

}

// E类也可以先继承Person类, 然后在通过mixins混合得到A,B的属性和方法

// 这样E就有了Person的方法和属性, 同时也有了A,B的方法和属性, 如果Person,A,B有相同的方法和属性, 那么最后一个将覆盖之前的

class E extends Person with A, B {

  E(String nickname) : super(nickname);

  @override

  printA() {

    print("这是使用mixins后获得的nickname属性 , nickname =${this.nickname}");

  }

  @override

  printB() {

    print(

        "B类没有nickname属性,但是因为mixins了A类, 所有可以用this.nickname = ${this.nickname}");

  }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • https://www.bilibili.com/video/av52490605?p=17 //教学视频 一个基...
    大写的空气阅读 3,405评论 0 0
  • 目录 参考资料 语言特性 关键字 变量与常量 数据类型 运算符 operators 控制流程语句 异常 Excep...
    GuoDongW阅读 185,665评论 22 341
  • Dart基础语法 一、选择开发工具 首先需要安装Dart SDK(https://www.dart-china.o...
    蓝童鞋阅读 4,046评论 0 0
  • Dart学习 =>只有一行代码可以使用剪头函数 => print(‘a’) 或者{ print(‘a’)} 内部语...
    love_p阅读 5,397评论 1 2
  • 前文链接: Dart简介 Dart语法(上) 内容: 函数(方法)函数定义及各类函数;函数参数;闭包 面向对象定义...
    玉圣阅读 7,288评论 0 2