构造函数基础
本课属于 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 RetrieverDart 还提供了一种简写构造函数语法,可以在参数列表中直接使用 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重点:构造函数可确保每个对象在创建时都用数据正确初始化,这样你就不用之后手动设置变量了。
挑战
简单你需要实现一个图书系统,给定了 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");
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Dart 在线编译器