1. 一个类可以不定义构造函数
class Person{
String firstName;
String lastName;
}
在这种没有构造函数的情况下Dart会为其隐式定义一个默认构造函数(与类名相同、无参数)
Person(){ // 隐式无参构造函数,
}
2.定义有参构造函数
class Person{
String firstName;
String lastName;
Person(String firstName,String lastName){ // 有参构造函数,
this.firstName = firstName;
this.lastName = lastName;
}
}
3.定义命名(有名字)构造函数
import 'dart:convert';
class Person{
String firstName;
String lastName;
Person.fromJson(Map data){ // 命名构造函数,
//Json格式的数据使用 'dart:convert'库,原生Json只支持转换为list数组或map对象,这里我们转换为map对象
this.firstName = data["firstName"]; //将map中的数据赋值给firstName属性
}
}
main() {
String s= '{"firstName": "Job"}'; //json字符串
Map map = JSON.decode(s); //解析字符串并返回map对象
var p = new Person.fromJson(map); //使用命名构造函数
print(p.firstName);
}
注:定义了命名构造函数,若不定义无参构造函数,则Dart不会自动定义默认构造函数,即:实例化时不能使用: new Person()(若需要这样实例化,必须手动提供); 只能使用 new Person.fromJson(map);见如下所示:
import 'dart:convert';
class Person{
String firstName;
String lastName;
Person(){} // 手动提供无参构造函数
Person.fromJson(Map data){ // 命名构造函数,
//Json格式的数据使用 'dart:convert'库,原生Json只支持转换为list数组或map对象,这里我们转换为map对象
this.firstName = data["firstName"]; //将map中的数据赋值给firstName属性
}
}
main() {
String s= '{"firstName": "Job"}'; //json字符串
Map map = JSON.decode(s); //解析字符串并返回map对象
var p1 = new Person.fromJson(map); //使用命名构造函数
var p2 = new Person(); //使用无参构造
print(p1.firstName);
}
二、具有继承结构的类