Dart 类的3种构造方法

195 阅读2分钟

image.png 开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

前言

很多Androider都在用FlutterUI框架,这个框架用的是Dart语言,会导致有一点点的入门门槛。但其实不然,Dart语言很大程度上跟Java很像,可以说是Java系的语言。但又很像JavaScript,像是一种弱类型语言。但实际上Dart是一种强类型语言,但支持了类型推断,就像C++20一样。

Dart语言是一种OOP(Object Oriented Programming)语言。因此就跟C++等语言一样,都有那显著的三个特征,封装、继承、多态。

在这篇文章中,我们主要学习与理解Dart中类的构造方法与Java的异同。以加速我们对Dart的理解。

话不多说,我们先来看看Dart类的基本构造方法。

构造函数

1.默认构造

Dart可以像Java一样。不显示声明构造函数,直接把类的成员变量和成员函数写好即可。系统会自己默认构造一个不带参数的默认构造函数。你像如下这样写:

 class People {

    // 成员变量
    String name = '张三';
    int age = 18;

    // 成员方法
    getInfo(){
      print('name=${this.name}------age=${this.age}');
    }
  }
}

而后,系统实际上会给你增加成下述这样:

class People {

  String name='张三';
  int age=20; 
  
  //默认构造函数
  Person();
  
  // 成员方法
   getInfo(){
     print('name=${this.name}------age=${this.age}');
   }
}

而构造方法的形参表传值之类的,则跟JavaC++的无差别,这里不再介绍。

2.命名构造函数

这个方法是Dart特有的,跟Java、C++等不太一样。这种方法可能可以使我们构造一个类的时候更清晰其意图。

这个我们应该也不陌生。在Flutter获取当前时间的时候我们会经常用到下面这段代码

DateTime d=new DateTime.now();

这实际上就是使用了DateTime这个类的命名构造函数。具体怎么用呢?即如下所示:

class People {
  late String name;
  late int age;
  
  //默认构造函数的简写
  People(this.name, this.age);

  People.one(String name, int age) {
    this.name = name;
    this.age = age;
  }

    // 成员方法
   getInfo(){
     print('name=${this.name}------age=${this.age}');
   }
}

3. 匿名构造方法(特殊)

class People {

  People._();
  
}

这个方法用得不多,一般是配合单例模型使用的。声明了这个了以后,则外部不能再使用类名加括号如People()这种形式构造类的对象了。

再多说一嘴,在使用单例的时候,可以如下使用

class People {
  People._();
  static final People _instance = People._();
  factory People() => _instance;
}

这样,无论在外部怎么调用People(),返回的都是同一个People实例。