Menu
CoddyTech

构造函数基础

本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 8 课,共 110 课。

构造函数是一种特殊的方法,在你创建新对象时会自动运行。它会在对象创建的那一刻初始化对象的实例变量。

下面是一个带有构造函数的类示例:

class Dog {
  String name;
  String breed;

  Dog(String name, String breed) {
    this.name = name;
    this.breed = breed;
  }
}

构造函数与类同名。创建对象时会传入参数。

通过向构造函数传递参数来创建对象:

Dog rex = Dog('Rex', 'German Shepherd');
Dog buddy = Dog('Buddy', 'Golden Retriever');

访问构造函数设置的变量:

print(rex.name);
print(rex.breed);
print(buddy.name);
print(buddy.breed);

输出:

Rex
German Shepherd
Buddy
Golden Retriever

Dart 还提供了一种简写构造函数语法,可以在参数列表中直接使用 this.variableName:

class Dog {
  String name;
  String breed;

  // 简写:自动将参数赋值给实例变量
  Dog(this.name, this.breed);
}

两个版本会产生相同的结果。这种简写是 Dart 中很受欢迎的特性,可以省去手动编写 this.name = name 的步骤。

你也可以添加默认参数值:

class Cat {
  String name;
  int age;

  Cat(this.name, [this.age = 1]); // age 的默认值为 1
}

Cat fluffy = Cat('Fluffy', 3);
Cat whiskers = Cat('Whiskers'); // age 的默认值为 1

print('${fluffy.name} is ${fluffy.age}');    // Fluffy 是 3
print('${whiskers.name} is ${whiskers.age}'); // Whiskers 是 1

重点:构造函数可确保每个对象在创建时都用数据正确初始化,这样你就不用之后手动设置变量了。

challenge icon

挑战

简单

你需要实现一个图书系统,给定了 PHP 文件(book.dart 和 driver.dart)。

你的任务:

  • 在 book.dart 中补全 Book 类,添加一个用于初始化 title、author 和 pages 的构造函数:使用 Dart 的简写语法 Book(this.title, this.author, this.pages);
  • 在 driver.dart 中,为 'Harry Potter' 创建一个 Book 对象,作者为 'J.K. Rowling',页数为 400

按照每个文件中的 TODO 注释操作。

亲手试试

import 'book.dart';

void main() {
  // TODO: 创建一个 Book 对象,包含:
  // title: 'Harry Potter', author: 'J.K. Rowling', pages: 400
  Book myBook = ?;

  print("'${myBook.title}' by ${myBook.author}, ${myBook.pages} pages");
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Dart 在线编译器