extends 和方法重写
共享并专门化父类行为
extends 和方法重写 是 CoddyKit 上的免费 Dart Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Dart Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Dart Academy 课程共包含 4 节课。
共享行为
当两个类共享大部分行为时,您可以将这些行为编写一次并重复使用。Dart 将其称为继承,这样可以避免复制粘贴。🌱
extends 关键字
在类名后写 extends 即可继承。新类是一个子类,会自动获得父类的字段和方法。
class Animal {}
class Dog extends Animal {}父类与子类
您继承的类称为超类(父类)。新类称为子类。Dog 是 Animal,但并非每个 Animal 都是 Dog。
继承的成员
子类可以立即使用父类的公共方法,就像这些方法属于自己一样。您只需编写一次继承的行为,所有子类都能受益。
class Animal {
void breathe() => print('breathing');
}
class Dog extends Animal {}
// Dog().breathe() works添加新行为
子类还可以在继承内容的基础上添加自己的方法。子类仍然是 Animal,但会获得父类从未拥有的额外能力。
class Dog extends Animal {
void bark() => print('Woof!');
}重写方法
有时,父类的版本并不适合子类。重写允许子类用自己的实现替换继承而来的方法。
class Animal {
void speak() => print('...');
}
class Cat extends Animal {
void speak() => print('Meow');
}@override 标记
在被替换的方法上方添加 @override 注解。它会告诉分析器确认父类确实有这个方法,从而及早发现拼写错误。
class Cat extends Animal {
@override
void speak() => print('Meow');
}必须使用相同的签名
重写必须保留相同的名称和兼容的签名。如果不慎更改参数或返回类型,Dart 就会拒绝它。
复用父类版本
在重写的方法中,您仍然可以通过父类调用原始实现,然后在它的前后添加自己的步骤。这样是在扩展行为,而不是丢弃它。
@override
void speak() {
super.speak();
print('and purrs');
}多态的实际应用
将子类存储在 Animal 类型的变量中并调用 speak:每个对象都会运行自己的版本。这就是多态,也是重写真正的价值所在。
Animal a = Cat();
a.speak(); // Meow单继承
Dart 类只能恰好扩展一个父类,绝不能扩展两个。以后如果要在互不相关的继承树之间共享功能,您可以使用混入。
快速检查
您在子类中替换了一个继承而来的方法。它会做什么?
回顾
您使用 继承来获得父类的成员,添加了新方法,并使用 @override 重写了其他方法。这就是类复用的核心。🎉
常见问题解答
「extends 和方法重写」课时是免费的吗?
是的 — 「extends 和方法重写」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Dart Academy 课程的其余内容,请升级到 CoddyKit PRO。 Dart Academy 课程共包含 4 节课。
「extends 和方法重写」这节课中我会学到什么?
共享并专门化父类行为 你通过在浏览器中直接运行的动手代码来练习 Dart Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Dart Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Dart Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「extends 和方法重写」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Dart Academy 课中编写并运行代码吗?
能。每节 Dart Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- extends 和方法重写
- 调用 super 和构造函数链
- 使用 with 关键字创建混入
- on 约束和混入顺序