默认构造函数
本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 10 课,共 110 课。
如果你没有在类中定义任何构造函数,Dart 会自动提供一个默认构造函数。这是一个不带参数的构造函数,只会创建该类的一个实例。
class Book {
String title = 'Unknown';
int pages = 0;
}
// Dart 提供默认构造函数:Book()
Book myBook = Book();
print(myBook.title); // Unknown默认构造函数在代码中不可见,但它确实存在。它不接受任何参数,并使用你为实例变量指定的默认值来初始化对象。
定义自己的构造函数后,系统就不会再自动提供默认构造函数。如果你想在带参数的构造函数之外保留一个无参数构造函数,就必须显式创建它:
class Book {
String title;
int pages;
// 显式定义的默认构造函数
Book() : title = 'Unknown', pages = 0;
// 带参数的构造函数
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // 使用默认构造函数
Book book2 = Book.withDetails('Dart', 300); // 使用带参数的构造函数显式默认构造函数使用初始化列表(冒号后面的部分)来设置初始值。当你想提供多种方式来创建同一个类的对象时,这种模式很有用。
挑战
简单让我们构建一个简单的产品库存系统,用来演示隐式和显式默认构造函数。
你将创建两个文件来组织代码:
product.dart:定义一个Product类,提供两种创建产品的方式:- 显式默认构造函数
Product(),使用初始化列表将name初始化为'Unnamed',并将price初始化为0.0 - 命名构造函数
Product.withDetails,接受name和price参数 display()方法,打印:Product: [name] - $[price]
- 显式默认构造函数
main.dart:导入产品类并创建两个产品:- 一个使用默认构造函数创建
- 一个使用命名构造函数创建,并传入
'Laptop'和999.99
display()。
你的 Product 类应该有两个实例变量:
String namedouble price
预期输出格式:
Product: Unnamed - $0.0
Product: Laptop - $999.99亲手试试
import 'product.dart';
void main() {
// TODO: 使用默认构造函数创建一个产品
// TODO: 使用命名构造函数,通过 'Laptop' 和 999.99 创建一个产品
// TODO: 对每个产品调用 display()
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Dart 在线编译器