Flutter 零基础入门(十四):Dart 抽象类(abstract)与接口思想
本文介绍了Dart中抽象类(abstract)与接口思想的核心概念。主要内容包括:1)抽象类的作用是定义行为规则而不提供具体实现;2)通过abstract关键字定义抽象类,子类必须实现其抽象方法;3)抽象类不能被实例化,但支持面向抽象编程;4)Dart通过implements实现接口,支持多接口继承;5)extends与implements的关键区别在于是否继承实现代码;6)抽象类在Flutter
Flutter 零基础入门(十四):Dart 抽象类(abstract)与接口思想
文章目录
在前面的学习中,我们已经掌握了:
- 类(Class)与对象(Object)
- 构造函数与 this
- late 与延迟初始化
- enum 表达状态
这些内容解决的是一个问题:
👉 “数据是什么”
但在真实项目中,还有另一个更重要的问题:
👉 “这个类应该做什么?”
这一篇,我们就来学习 Dart 中用来约束行为、设计结构的核心工具:
👉 抽象类(abstract)与接口思想
一、为什么需要抽象类?
先来看一个“看起来没问题,但很糟糕”的写法:
class Animal {
void run() {}
void fly() {}
}
问题在哪?
- 狗能跑,但不能飞
- 鸟能飞,但不一定跑
- 所有子类被迫拥有不合理的方法
📌 说明:
这个类的“能力设计”出了问题
二、抽象类是什么?
抽象类的本质是:
“只定义规则,不给具体实现”
它告诉子类:
- 你必须有哪些方法
- 但怎么实现你自己决定
三、如何定义抽象类?
使用 abstract 关键字:
abstract class Animal {
void move();
}
注意:
- 抽象方法 没有方法体
- 抽象类 不能被实例化
四、继承抽象类(extends)
class Dog extends Animal {
@override
void move() {
print('Dog is running');
}
}
📌 规则:
- 必须实现所有抽象方法
- 否则编译报错
五、抽象类不能被直接创建对象
Animal a = Animal(); // ❌ 报错
但你可以这样写:
Animal a = Dog();
这叫做:
面向抽象编程
六、抽象类的真正价值
抽象类的价值不在“语法”,而在设计思想。
void makeMove(Animal animal) {
animal.move();
}
现在:
- 传 Dog 可以
- 传 Cat 可以
- 代码完全不需要修改
📌 这就是 解耦
七、抽象类可以有普通方法
abstract class Animal {
void move();
void breathe() {
print('breathing...');
}
}
子类:
- 必须实现
move - 可以直接使用
breathe
八、Dart 中的“接口”思想
Dart 没有 interface 关键字。
但:
任何 class / abstract class 都可以当作接口使用
九、implements:真正的接口实现
abstract class Flyable {
void fly();
}
class Bird implements Flyable {
@override
void fly() {
print('Bird is flying');
}
}
特点:
- 必须实现接口中的所有方法
- 不继承实现代码,只继承“规则”
十、extends vs implements 区别
| 对比点 | extends | implements |
|---|---|---|
| 是否继承实现 | 是 | 否 |
| 是否必须重写 | 否 | 是 |
| 是否只能一个 | 是 | 否 |
📌 Dart 支持 多接口实现
十一、多个接口示例
abstract class Flyable {
void fly();
}
abstract class Runnable {
void run();
}
class SuperMan implements Flyable, Runnable {
@override
void fly() {}
@override
void run() {}
}
十二、抽象类 vs 普通类如何选择?
使用抽象类当:
- 你在设计“规则”
- 你不希望被直接实例化
- 你想强制子类实现某些方法
📌 一句话:
当你在思考“应该怎么用”,而不是“怎么写”时,用抽象类
十三、抽象类在 Flutter 中的体现
Flutter 中大量使用抽象思想:
- Widget 是抽象概念
- State 是抽象生命周期
- RenderObject 是抽象渲染规则
你现在学的不是零碎语法,而是:
Flutter 架构的底层思维
十四、这一篇你真正升级了什么?
你已经开始:
- 用“规则”设计代码
- 用“抽象”解耦逻辑
- 用“接口”组织系统
这是一名工程师的分水岭。
十五、总结
本篇你学会了:
- 什么是抽象类
- abstract 的用法
- extends 与 implements 的区别
- Dart 的接口设计思想
🔜 下一篇预告
《Flutter 零基础入门(十五):继承、多态与面向对象三大特性》
下一篇我们将系统梳理:
- 继承
- 封装
- 多态
并且你会发现:
Flutter 的设计,几乎全部建立在这三点之上
更多推荐



所有评论(0)