Dart Academy · 课时

抽象类和抽象方法

定义子类必须实现的内容

第 1 / 4 课13 个步骤

抽象类和抽象方法 是 CoddyKit 上的免费 Dart Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Dart Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Dart Academy 课程共包含 4 节课。

抽象的含义

抽象类是一份可以描述却不能直接创建的蓝图。它的存在是为了被扩展,而不是单独创建实例。

将类标记为抽象

在类前添加抽象关键字。这会告诉 Dart,该类尚未完成,旨在作为共享的基础类。

abstract class Shape {
  double area();
}

抽象方法没有主体

抽象方法声明名称和签名,但以分号结束,将实际工作留给每个子类完成。

abstract class Shape {
  double area(); // no body
}

不能创建它的实例

尝试写出 Shape() 会产生编译错误。Dart 会拒绝它,因为抽象类尚未完成,也没有真正的实现。

var s = Shape(); // error: abstract

子类填补空白

子类使用继承,并且必须为每个抽象方法提供主体,将蓝图变成可用的对象。

class Circle extends Shape {
  final double r;
  Circle(this.r);
  double area() => 3.14 * r * r;
}

也可以包含具体方法

抽象类也可以加入完整编写的具体方法。子类会直接继承这些方法,只需补全抽象方法。

abstract class Shape {
  double area();
  void describe() => print('Area is ' + area().toString());
}

抽象类中的字段

抽象类也可以包含字段和构造函数。创建子类时它们会运行,因此共享状态可以存放在基础类中。

abstract class Shape {
  final String name;
  Shape(this.name);
}

编译器强制执行约定

如果子类忘记实现某个抽象方法,Dart 会在您运行代码之前报告错误。约定会由编译器为您检查。

class Square extends Shape {} // error: area() missing

为什么使用抽象类

抽象类让多种类型共享同一种形状,同时保证每种类型都提供自己的行为。您只需设计一次清晰的约定,就能在任何地方复用它。

抽象获取器

能留作抽象的不只有方法。没有主体的获取器也以相同方式工作,并且必须由子类定义。

abstract class Shape {
  String get label;
}

保存抽象类型的引用

您可以将任何子类存储在类型为抽象类的变量中。该类型承诺提供相应行为,却不指定具体类。

Shape s = Circle(2);
print(s.area());

快速检查

关于抽象类的一个小问题。

回顾

抽象类是供您扩展而不是实例化的蓝图。抽象方法没有主体,具体子类必须实现它们。做得很好!🎯

免费开始

用 AI 导师学习 Dart — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「抽象类和抽象方法」课时是免费的吗?

是的 — 「抽象类和抽象方法」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Dart Academy 课程的其余内容,请升级到 CoddyKit PRO。 Dart Academy 课程共包含 4 节课。

「抽象类和抽象方法」这节课中我会学到什么?

定义子类必须实现的内容 你通过在浏览器中直接运行的动手代码来练习 Dart Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Dart Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Dart Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「抽象类和抽象方法」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Dart Academy 课中编写并运行代码吗?

能。每节 Dart Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 抽象类和抽象方法
  2. 隐式接口和 implements
  3. 通过共享类型实现多态
  4. 优先使用组合而非继承
← 返回 Dart Academy