Menu
CoddyTech

回顾:动物系统

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

challenge icon

挑战

简单

让我们构建一个完整的动物系统,把你学过的所有 mixin 知识结合起来!你将创建一个基础 Animal 类、使用 on 关键字的行为 mixin,以及以不同方式组合这些能力的特定动物类。

你将把代码整理到 3 个文件中:

  • animal.dart:定义所有动物都会继承的基础类:
    • 一个 Animal 类,其中包含 String name 属性和一个构造函数
    • 一个 describe() 方法,用于输出 [name] is an animal
  • behaviors.dart:导入动物文件,并创建 3 个行为 mixin,每个 mixin 都使用 on 关键字,将适用范围限制为 Animal:
    • 一个 Swimming mixin,其中包含 swim() 方法,用于输出 [name] is swimming
    • 一个 Flying mixin,其中包含 fly() 方法,用于输出 [name] is flying
    • 一个 Walking mixin,其中包含 walk() 方法,用于输出 [name] is walking
  • main.dart:导入这两个文件,并创建 3 个动物类,将继承与不同的 mixin 组合起来:
    • 一个 Duck 类,它继承 Animal,并使用全部 3 个 mixin(Swimming、Flying、Walking)
    • 一个 Fish 类,它继承 Animal,并且只使用 Swimming mixin
    • 一个 Bird 类,它继承 Animal,并使用 Flying 和 Walking mixin
    然后展示每种动物的能力:
    • 创建一只名为 'Donald' 的 Duck,调用 describe(),然后依次调用 swim()、fly() 和 walk()
    • 输出一个空行
    • 创建一条名为 'Nemo' 的 Fish,调用 describe(),然后调用 swim()
    • 输出一个空行
    • 创建一只名为 'Tweety' 的 Bird,调用 describe(),然后调用 fly() 和 walk()

由于有 on Animal 约束,每个 mixin 都可以访问 name 属性,从而在提供灵活行为组合的同时确保类型安全。

预期输出:

Donald is an animal
Donald is swimming
Donald is flying
Donald is walking

Nemo is an animal
Nemo is swimming

Tweety is an animal
Tweety is flying
Tweety is walking

亲手试试

import 'animal.dart';
import 'behaviors.dart';

// TODO: 创建继承 Animal 并使用 Swimming、Flying 和 Walking 混入的 Duck 类
class Duck {
  // TODO: 实现 Duck 类
}

// TODO: 创建继承 Animal 且只使用 Swimming 混入的 Fish 类
class Fish {
  // TODO: 实现 Fish 类
}

// TODO: 创建继承 Animal 并使用 Flying 和 Walking 混入的 Bird 类
class Bird {
  // TODO: 实现 Bird 类
}

void main() {
  // TODO: 创建一个名为 'Donald' 的 Duck 对象
  // 调用 describe()、swim()、fly()、walk()
  
  // TODO: 打印一个空行
  
  // TODO: 创建一个名为 'Nemo' 的 Fish 对象
  // 调用 describe()、swim()
  
  // TODO: 打印一个空行
  
  // TODO: 创建一个名为 'Tweety' 的 Bird 对象
  // 调用 describe()、fly() 和 walk()
}

面向对象编程中的所有课

自己练习: Dart 在线编译器