在前面的学习中,我们已经掌握了:
这些内容解决的是一个问题:
👉 “数据是什么”
但在真实项目中,还有另一个更重要的问题:
👉 “这个类应该做什么?”
这一篇,我们就来学习 Dart 中用来约束行为、设计结构的核心工具: 👉 抽象类(abstract)与接口思想
先来看一个“看起来没问题,但很糟糕”的写法:
class Animal{
void run() {}
void fly() {}
}
问题在哪?
📌 说明:这个类的“能力设计”出了问题
抽象类的本质是:
“只定义规则,不给具体实现”
它告诉子类:
使用 abstract 关键字:
abstract class Animal {
void move();
}
注意:
class Dog extends Animal {
@override
void move() {
print('Dog is running');
}
}
📌 规则:
Animal a = Animal(); // ❌ 报错
但你可以这样写:
Animal a = Dog();
这叫做:
面向抽象编程
抽象类的价值不在“语法”,而在设计思想。
void makeMove(Animal animal) {
animal.move();
}
现在:
📌 这就是 解耦
abstract class Animal {
void move();
void breathe() {
print('breathing...');
}
}
子类:
movebreatheDart 没有 interface 关键字。
但:
任何 class / abstract class 都可以当作接口使用
abstract class Flyable {
void fly();
}
class Bird implements Flyable {
@override
void fly() {
print('Bird is flying');
}
}
特点:
对比点 | extends | implements |
|---|---|---|
是否继承实现 | 是 | 否 |
是否必须重写 | 否 | 是 |
是否只能一个 | 是 | 否 |
📌 Dart 支持 多接口实现
abstract class Flyable {
void fly();
}
abstract class Runnable {
void run();
}
class SuperMan implements Flyable, Runnable {
@override
void fly() {}
@override
void run() {}
}
使用抽象类当:
📌 一句话:
当你在思考“应该怎么用”,而不是“怎么写”时,用抽象类
Flutter 中大量使用抽象思想:
你现在学的不是零碎语法,而是:
Flutter 架构的底层思维
你已经开始:
这是一名工程师的分水岭。
本篇你学会了:
《Flutter 零基础入门(十五):继承、多态与面向对象三大特性》
下一篇我们将系统梳理:
并且你会发现:
Flutter 的设计,几乎全部建立在这三点之上