1. 一個類能夠不定義構造函數json
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.定義命名(有名字)構造函數this
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);見以下所示:spa
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); }
2、具備繼承結構的類code