作者: 高阿呆 | 来源:发表于2019-12-24 17:59 被阅读0次

    一、标准构造方法

    Dart中所有的类都继承于Object

    // 默认继承于Object类(extends Object)
    class Person {
      String name;
      int age;
      // 构造方法,快捷键 (control+enter)->constructor
      Person(this.name, this.age); 
    
    // 重写父类的toString方法
    @override
      String toString() {
        // TODO: implement toString
        return 'name:$name, age:$age';
      }
    }
    
    
    // 创建Person子类,并初始化构造方法。在类的内部创建的带有下划线的变量为该类的私有变量,外界无法访问,{}内部的参数为可选参数,在初始化时可不初始化,其余参数在初始化时为必填参数
    class Student extends Person {
      String _school; // 私有变量
      String city;  // 可选参数 
      String country; // 默认参数,不赋值时为默认值
      Student(this._school, String name, int age,{this.city,  this.country = '中国'}) : super(name, age);
    }
    

    二、命名构造方法

    // 命名构造方法:类名+.方法名,如果继承于父类,要初始化父类的初始化方法
    // 使用命名构造方法为类实现多个构造方法
    // 命名构造方法也可以有自己的方法体
    class Student extends Person {
       Student.init(Student stu) : super(stu.name, stu.age){
        //  命名构造方法的方法体
        print('命名构造方法');
    }
    

    三、工厂构造方法

    // 他不仅是一种构造方法,还是一种模式
    // 相当于一个单例对象

    class Logger{
      static Logger _logger;
      // factory工厂命名构造方法
      factory Logger() {
        if (_logger == null) {
          _logger = Logger._internal();  // 一般初始化一个私有的构造方法
        }
        return _logger;
      }
    
      Logger._internal(); // 私有构造方法
    }
    
    void func() {
      Logger log1 = Logger();
      Logger log2 = Logger();
      print('---------------');
      print(log1==log2);
      print('---------------');
    }
    

    // 打印结果


    log.jpg

    四、命名工厂构造方法

    // 适用于在数据请求中,将数据转化为模型
    // 命名工厂构造方法 :factory 类名+.方法名(参数,可自定义)
    // 他可以有返回值,而且不需要将类的final变量作为参数,是提供一种灵活获取类对象的方式

    factory Student.init(Student stu) {
        return Student(stu._school, stu.name, stu.age);
    }
    

    五、setter&&getter方法

    // 我们可以为私有变量设置getter方法让外界获取到私有变量

    // get方法
    String get school => _school;
    // set方法
    set school(String value) {
        _school = value;
    }
    

    六、静态方法

    // 参数自定义,可传可不传
    static doSomething(){
        print('++++++');
    }
    
    // 使用
    类名.doSomething();
    

    相关文章

      网友评论

        本文标题:

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