Flutter-Dart中的Mixins混入你知道是什么吗?

1. 写在前面

学习 Dart中的Mixins的混入。

Flutter

2. 什么是混入?

什么是Mixins?说白了就是多继承



2.1 混入举例

  • with
    class D1 extends A1 with B1,C1 {
      d1() => print("D1...");
    
    }
    class A1 {
      a1() => print("A1...");
    }
    class B1 {
      b1() => print("B1...");
    }
    class C1 {
      c1() => print("C1...");
    }
    

这里 with 是混入的意思,D1继承extends A1 ,然后混入with B1,C1,以此达到多继承的目的。

  • 混合的对象是类
  • 可以混合多个
    void main() {
      mixinTest();
    }
    mixinTest(){
      D1 d = D1();
      d.d1();
      d.a1();
      d.b1();
      d.c1();
    }
    

  • 打印结果如下:打印结果

 混入多个类,这对方法复用带来的极大的便利性,破除了众多限制,不需要实例化混入的类,也不需要混入的类单例化。

2.2 混入同名方法会这样?

如果多个混入的类,有同名的方法,调用这个方法,到底是调用谁的呢?

class D1 extends A1 with B1,C1 {
  d1() => print("D1...");

}
class A1 {
  a1() => print("A1...");
}
class B1 {
  a1() => print("B1...");
}
class C1 {
  a1() => print("C1...");
}
  • 测试结果

测试结果

从打印的结果来看,如果混入的类里面有同名的方法,就是谁最后混入,调用的就是谁的方法,前面的会被后面的覆盖掉! 

  • 作为混入的类,是不能实现构造方法

作为混入的类,是不能实现构造方法,会报错,如下:

报错信息



2.3 混入的简写

  • 混入还可以下面这样写
class D1 = A1 with B1,C1;
// class D1 extends A1 with B1,C1 {
//
// }

只要 D1 中没有属性和方法就可以这样简便的写。



2. 4 操作符重载

  • 操作符重载

正常情况下,对象是不可以比较的,会报错,如下:

报错信息

  • 重载操作符代码
operatorTest(){
  OperatorClass op1 = OperatorClass(20);
  OperatorClass op2 = OperatorClass(18);
  //正常情况下 是不可以比较对象的,需要重载操作符
  print(op1 > op2);

}
class OperatorClass {
  int age;
  OperatorClass(this.age);
  //重载操作符
  bool operator > (OperatorClass other) => this.age > other.age;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

短暂又灿烂的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值