• Dart 类与对象 接口和混入


    Dart 类与对象 - 接口

    接口在 Dart 中就是一个类(只是用法不同)
      与Java不同,Java中的接口需要用 interface 关键字声明,Dart 中不需要
      接口可以是任意类,但一般使用抽象类做接口

    一个类可以 实现(implements)多个接口,多个接口用逗号分隔
      class MyClass implements Interface1, Interface2 {...}
      接口可以看成一个个小零件,类实现接口就相当于组装零件

    普通类实现接口后,必须重写接口中所有的属性和方法
    // 手机处理器
    abstract class Processor {
      String cores; // 内核:2核,4核
      arch(String name); // 芯片制程:7nm, 5nm
    }
    
    // 手机摄像头
    abstract class Camera {
      String resolution; // 分辨率:1000万,3000万
      brand(String name); // 品牌:三星,徕卡,蔡司
    }
    
    // 通过普通类实现接口
    class Phone implements Processor, Camera {
      @override
      String cores;
    
      @override
      String resolution;
    
      Phone(this.cores, this.resolution);
    
      @override
      arch(String name) {
        print('芯片制程:$name');
      }
    
      @override
      brand(String name) {
        print('相机品牌:$name');
      }
    }
    
    void main() {
      Phone p = new Phone('4核', '4800万');
      p.arch('5nm'); // 芯片制程:5nm
      p.brand('蔡司'); // 相机品牌:蔡司
    }
    Dart 类与对象 - 混入(Mixin)

    混入(Mixin)是一段公共代码,混入有两种声明方式:
    (1)、把类用作混入,如:class MixinA {...}
          作为 Mixin 的类只能继承自 Object,不能继承其它类
          作为 Mixin 的类不能有构造函数
    (2)、使用 mixin 关键字声明,如:mixin MixinB {...}

    混入(Mixin)可以提高代码复用的效率,普通类可以通过 with 来使用混入,如:
      class MyClass with MixinA, MixinB {...}

    使用多个混入时,后引入的混入会覆盖先引入的混入中的重复内容,如:
      MixinA 和 MixinB 中都有 hello() 方法,MyClass 会使用MixinB中的
    class MixinA {
      String name = 'MixinA';
    
      void printA() {
        print('A');
      }
    
      void run() {
        print('A is running');
      }
    }
    
    mixin MixinB {
      String name = 'MixinB';
    
      void printB() {
        print('B');
      }
    
      void run() {
        print('B is running');
      }
    }
    
    class MyClass with MixinA, MixinB {}
    
    void main() {
      var c = new MyClass();
      c.printA(); // A
      c.printB(); // B
    
      // 后引入的混入,会覆盖之前引入的混入中重复的内容
      print(c.name); // MixinB
      c.run(); // B is running
    }

    作为 Mixin 的类只能继承自 Object,不能继承其它类

    class Base {
    
    }
    
    class MixinA extends Base {
      String name = 'MixinA';
    
      void printA() {
        print('A');
      }
    
      void run() {
        print('A is running');
      }
    }
    
    // Error: The class 'MixinA' can't be used as a mixin because it extends a class other than 'Object'
    class MyClass with MixinA, MixinB {}
    class MixinA extends Object {
      String name = 'MixinA';
    
      void printA() {
        print('A');
      }
    
      void run() {
        print('A is running');
      }
    }
    
    // Ok
    class MyClass with MixinA, MixinB {}
     
    作为 Mixin 的类不能有构造函数
    class MixinA extends Object {
      String name = 'MixinA';
    
      // 尝试在混入类中声明一个构造函数
      MixinA(this.name);
    
      void printA() {
        print('A');
      }
    
      void run() {
        print('A is running');
      }
    }
    
    // Error: The class 'MixinA' can't be used as a mixin because it declares a constructor
    class MyClass with MixinA, MixinB {}
  • 相关阅读:
    UVALive2678子序列
    UVA11549计算机谜题
    UVA11520填充正方形
    LA3635派
    UVALive3971组装电脑
    记录未完成题目
    SPOJ 6219 Edit distance字符串间编辑距离
    ACM组队安排-——杭电校赛(递推)
    逆袭指数-——杭电校赛(dfs)
    油菜花王国——杭电校赛(并查集)
  • 原文地址:https://www.cnblogs.com/rogerwu/p/16198793.html
Copyright © 2020-2023  润新知