0Pricing
Dart Academy · 课时

调用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. extends 和方法重写
  2. 调用 super 和构造函数链
  3. 使用 with 关键字创建混入
  4. on 约束和混入顺序
← 返回 Dart Academy