首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Flutter 零基础入门(十四):Dart 抽象类(abstract)与接口思想

Flutter 零基础入门(十四):Dart 抽象类(abstract)与接口思想

作者头像
LarryLan
发布2026-01-16 11:14:33
发布2026-01-16 11:14:33
650
举报

Dart 抽象类(abstract)与接口思想

在前面的学习中,我们已经掌握了:

  • 类(Class)与对象(Object)
  • 构造函数与 this
  • late 与延迟初始化
  • enum 表达状态

这些内容解决的是一个问题:

👉 “数据是什么”

但在真实项目中,还有另一个更重要的问题:

👉 “这个类应该做什么?”

这一篇,我们就来学习 Dart 中用来约束行为、设计结构的核心工具: 👉 抽象类(abstract)与接口思想


一、为什么需要抽象类?

先来看一个“看起来没问题,但很糟糕”的写法:

代码语言:javascript
复制
class Animal{
  void run() {}
  void fly() {}
}

问题在哪?

  • 狗能跑,但不能飞
  • 鸟能飞,但不一定跑
  • 所有子类被迫拥有不合理的方法

📌 说明:这个类的“能力设计”出了问题


二、抽象类是什么?

抽象类的本质是:

“只定义规则,不给具体实现”

它告诉子类:

  • 你必须有哪些方法
  • 但怎么实现你自己决定

三、如何定义抽象类?

使用 abstract 关键字:

代码语言:javascript
复制
abstract class Animal {
  void move();
}

注意:

  • 抽象方法 没有方法体
  • 抽象类 不能被实例化

四、继承抽象类(extends)

代码语言:javascript
复制
class Dog extends Animal {
  @override
  void move() {
    print('Dog is running');
  }
}

📌 规则:

  • 必须实现所有抽象方法
  • 否则编译报错

五、抽象类不能被直接创建对象

代码语言:javascript
复制
Animal a = Animal(); // ❌ 报错

但你可以这样写:

代码语言:javascript
复制
Animal a = Dog();

这叫做:

面向抽象编程


六、抽象类的真正价值

抽象类的价值不在“语法”,而在设计思想

代码语言:javascript
复制
void makeMove(Animal animal) {
  animal.move();
}

现在:

  • 传 Dog 可以
  • 传 Cat 可以
  • 代码完全不需要修改

📌 这就是 解耦


七、抽象类可以有普通方法

代码语言:javascript
复制
abstract class Animal {
  void move();

  void breathe() {
    print('breathing...');
  }
}

子类:

  • 必须实现 move
  • 可以直接使用 breathe

八、Dart 中的“接口”思想

Dart 没有 interface 关键字

但:

任何 class / abstract class 都可以当作接口使用


九、implements:真正的接口实现

代码语言:javascript
复制
abstract class Flyable {
  void fly();
}

class Bird implements Flyable {
  @override
  void fly() {
    print('Bird is flying');
  }
}

特点:

  • 必须实现接口中的所有方法
  • 不继承实现代码,只继承“规则”

十、extends vs implements 区别

对比点

extends

implements

是否继承实现

是否必须重写

是否只能一个

📌 Dart 支持 多接口实现


十一、多个接口示例

代码语言:javascript
复制
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 的设计,几乎全部建立在这三点之上

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Larry的Hub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Dart 抽象类(abstract)与接口思想
    • 一、为什么需要抽象类?
    • 二、抽象类是什么?
    • 三、如何定义抽象类?
    • 四、继承抽象类(extends)
    • 五、抽象类不能被直接创建对象
    • 六、抽象类的真正价值
    • 七、抽象类可以有普通方法
    • 八、Dart 中的“接口”思想
    • 九、implements:真正的接口实现
    • 十、extends vs implements 区别
    • 十一、多个接口示例
    • 十二、抽象类 vs 普通类如何选择?
    • 十三、抽象类在 Flutter 中的体现
    • 十四、这一篇你真正升级了什么?
    • 十五、总结
    • 🔜 下一篇预告
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档