回顾:动物系统
本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 56 课,共 110 课。
挑战
简单让我们构建一个完整的动物系统,把你学过的所有 mixin 知识结合起来!你将创建一个基础 Animal 类、使用 on 关键字的行为 mixin,以及以不同方式组合这些能力的特定动物类。
你将把代码整理到 3 个文件中:
animal.dart:定义所有动物都会继承的基础类:- 一个
Animal类,其中包含String name属性和一个构造函数 - 一个
describe()方法,用于输出[name] is an animal
- 一个
behaviors.dart:导入动物文件,并创建 3 个行为 mixin,每个 mixin 都使用on关键字,将适用范围限制为Animal:- 一个
Swimmingmixin,其中包含swim()方法,用于输出[name] is swimming - 一个
Flyingmixin,其中包含fly()方法,用于输出[name] is flying - 一个
Walkingmixin,其中包含walk()方法,用于输出[name] is walking
- 一个
main.dart:导入这两个文件,并创建 3 个动物类,将继承与不同的 mixin 组合起来:- 一个
Duck类,它继承Animal,并使用全部 3 个 mixin(Swimming、Flying、Walking) - 一个
Fish类,它继承Animal,并且只使用Swimmingmixin - 一个
Bird类,它继承Animal,并使用Flying和Walkingmixin
- 创建一只名为
'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 在线编译器