美文网首页Flutter
Dart基础语法<九> 类(下)

Dart基础语法<九> 类(下)

作者: 果汁味Studio | 来源:发表于2021-01-03 10:18 被阅读0次

    本节主要记录一下Dart中关于类的使用

    • 可调用的类
    • 混合Mixins
    可调用的类

    如果 Dart 类实现了 call() 函数则可以当做方法来调用。

    class Callable {
      void call(int a, int b) {
        print(a + b);
      }
    }
    
    void main() {
      Callable callable = Callable();
      callable(10, 15);
    }
    

    运行结果为25,直接执行了call()方法

    混合Mixins
    • Mixins 是在多类继承中重用一个类代码的方法。
    • 被Mixin(混入)的类不能有构造函数。
    • 用法即为with + 混入的类, 如下demo中类Cabc三个方法。
    class A {
      void a() => print("Aa");
    
      void b() => print("Ab");
    
    }
    
    class B {
      void a() => print("Ba");
    
      void b() => print("Bb");
    }
    
    class C with A, B {
      void c() => print("C");
    }
    
    class D with B, A {
      void d() => print("D");
    }
    
    void main() {
      C c = C();
      D d = D();
      c.a();
      d.a();
      c.b();
      d.b();
      c.c();
      d.d();
    }
    
    • 由于A类与B类存在相同的方法a,具体执行则由最后混入的类确定(即B类),故运行结果输出Ba Aa Bb Ab C D

    • 继承与mixins是兼容的,如下demo中R1 R2类均继承类C,同时支持MixinA B

    class A {
      void f() => print("A");
    }
    
    class B {
      void f() => print("B");
    }
    
    class C {
      void f() => print("C");
    }
    
    class R1 extends C with A, B {}
    
    class R2 extends C with B, A {}
    
    class R3 extends C with B, A {
      @override
      f() {
        super.f();
      }
    }
    
    void main() {
      R1 r1 = R1();
      R2 r2 = R2();
      R3 r3 = R3();
      r1.f();
      r2.f();
      r3.f();
    }
    

    运行结果为B A A
    注:对比R2 R3类, f重写方法调用的super,实际调用并非父类C的方法(和想像的不一样)。

    • Mixins弥补了接口和继承的不足(继承只支持单继承,而接口无法复用实现),可以多混入且能复用混入类的具体实现。
      如下demo,可以设计出同时带a b 两个方法的抽象类D,同时无须像C类那样必须实现b方法
    abstract class A {
      void a();
    }
    
    abstract class B {
      void b();
    }
    
    abstract class C extends A implements B {
      @override
      void b() => print("B");
    }
    
    abstract class D with A, B {}
    

    相关文章

      网友评论

        本文标题:Dart基础语法<九> 类(下)

        本文链接:https://www.haomeiwen.com/subject/djaznktx.html