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 的设计,几乎全部建立在这三点之上

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐