:::

3-7 Dart 的物件導向

Dart 是一種面向對象語言,包含類和基於 mixin 的繼承兩部分。每個對象是一個類的實例,並且 Object 是所有類的父類。基於 mixin 的繼承指的是每個類(除了 Object )都只有一個父類,類體還可以在多個類繼承中被重用。

實例化成員變數

void main() {
  var user = User();
  user.name = 'Tad'; //使用隱藏的 setter 方法
  user.age = 45; //使用隱藏的 setter 方法
}

class User {
  String name; //name 成員變數
  int age; //age 成員變數
}

構造函數

class User {
  String name; //name 成員變數
  int age; //age 成員變數
  // 構造函數,需和類同名
  User(String name, int age) {
    this.name = name;
    this.age = age;
  }
}

this指向當前實例,故可簡化為:

class User {
  String name; //name 成員變數
  int age; //age 成員變數
  // this指向當前實例,故可簡化為:
  User(this.name, this.age) ;
}

命名的構造函數

void main() {
  var user = User('Tad', 45);
}

class User {
  String name; //name 成員變數
  int age; //age 成員變數
  // this指向當前實例,故可簡化為:
  User(this.name, this.age) ;
  
  // 命名的構造函數
  User.fromJson(Map json) {
    name = json['name'];
    age = json['age'];
  }
}

使用命名構造函數可以為一個類聲明多個構造函數,或者說是提供額外的聲明,完整用法如:

void main() {
  //用 User() 創建一個使用者。(new 其實可以省略)
  var user = new User('Tad', 45);

  var jsonData = JSON.decode('{"name":Cat, "age":18}');

// 用 User().fromJson() 創建一個使用者。
  var user2 = new User.fromJson(jsonData);
}

class User {
  String name; //name 成員變數
  int age; //age 成員變數
  // this指向當前實例,故可簡化為:
  User(this.name, this.age);

  // 命名的構造函數
  User.fromJson(Map json) {
    name = json['name'];
    age = json['age'];
  }
}

 


:::

書籍目錄

展開 | 闔起

快速登入


http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D1365%26tbsn%3D42

計數器

今天: 745745745
昨天: 3068306830683068
總計: 8077250807725080772508077250807725080772508077250