调用 super 和构造函数链
在构造过程中访问父类
调用 super 和构造函数链 是 CoddyKit 上的免费 Dart Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Dart Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Dart Academy 课程共包含 4 节课。
构造顺序
创建子类时,必须先设置好它的父类。Dart 保证父类的构造函数会在子类主体开始执行之前运行。🏗️
认识父类
父类关键字指向对象中的父类部分。您可以在子类内部使用它访问父类的构造函数、方法和字段。
隐式调用父类构造函数
如果您什么都不写,Dart 会自动为您调用父类的无参数构造函数。这个不可见的父类构造调用正是父类总会先初始化的原因。
class Animal { Animal() => print('Animal'); }
class Dog extends Animal { Dog(); }显式调用父类
当父类需要参数时,您要在构造函数的初始化列表中、冒号之后调用父类(...)。它会将值沿继承链向上传递。
class Dog extends Animal {
Dog(String name) : super(name);
}父类调用的位置
父类调用位于初始化列表中,绝不能写在构造函数主体内。主体开始运行时,父类已经完全构建好了。
Dog(String name, this.breed) : super(name);父类参数
现代 Dart 允许您使用 super.field 将参数直接转发给父类。这样可以减少参数列表中的重复样板代码。
class Dog extends Animal {
Dog(super.name);
}调用父类方法
在重写的方法中,super.method()会运行父类的原始版本。这样是在扩展行为,而不是完全替换它。
@override
void speak() {
super.speak();
print('extra');
}沿继承树向上调用
当继承有多个层级时,每个构造函数都会调用自己的父类。这个链会一直到达顶层,然后再逐层向下运行各个类的主体,直到您的类。
初始化顺序
完整顺序是:先运行初始化列表和父类调用,然后运行父类主体,最后运行子类主体。在任何主体运行之前,字段就已经准备好接收最终值。
父类需要参数时
如果父类没有默认构造函数,您必须使用正确的参数调用父类。省略这一步,Dart 就会报告编译错误。
使用 this 重定向
在同一个类中,构造函数可以使用 this(...) 调用另一个构造函数。这是同级构造函数之间的链式调用,不同于使用父类向上调用。
Point.origin() : this(0, 0);快速检查
想一想,父类构造函数调用必须出现在哪里。
回顾
您调用了父类来运行父类构造函数和方法,使用父类参数转发值,并使用 this 重定向到同级构造函数。🔗
常见问题解答
「调用 super 和构造函数链」课时是免费的吗?
是的 — 「调用 super 和构造函数链」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Dart Academy 课程的其余内容,请升级到 CoddyKit PRO。 Dart Academy 课程共包含 4 节课。
「调用 super 和构造函数链」这节课中我会学到什么?
在构造过程中访问父类 你通过在浏览器中直接运行的动手代码来练习 Dart Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Dart Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Dart Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「调用 super 和构造函数链」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Dart Academy 课中编写并运行代码吗?
能。每节 Dart Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- extends 和方法重写
- 调用 super 和构造函数链
- 使用 with 关键字创建混入
- on 约束和混入顺序