Menu
CoddyTech

默认构造函数

本课属于 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); // 使用带参数的构造函数

显式默认构造函数使用初始化列表(冒号后面的部分)来设置初始值。当你想提供多种方式来创建同一个类的对象时,这种模式很有用。

challenge icon

挑战

简单

让我们构建一个简单的产品库存系统,用来演示隐式和显式默认构造函数。

你将创建两个文件来组织代码:

  • 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 name
  • double price

预期输出格式:

Product: Unnamed - $0.0
Product: Laptop - $999.99

亲手试试

import 'product.dart';

void main() {
  // TODO: 使用默认构造函数创建一个产品
  
  // TODO: 使用命名构造函数,通过 'Laptop' 和 999.99 创建一个产品
  
  // TODO: 对每个产品调用 display()
}
quiz icon自我测试

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

面向对象编程中的所有课

自己练习: Dart 在线编译器