Flutter 零基础入门(十五):继承、多态与面向对象三大特性

文章目录

在前面的学习中,我们已经分别学过:

  • 类(Class)与对象(Object)
  • 构造函数、this、late
  • 抽象类(abstract)与接口思想

但你可能还没有一个整体感觉

👉 为什么要学这些?

👉 它们之间的关系是什么?

👉 Flutter 到底在用什么思想?

这一篇,我们来系统梳理面向对象的三大特性,也是你从"会写 Dart"到"理解 Flutter 架构"的关键一步。


一、什么是面向对象?

一句话理解:

用"对象"来描述真实世界中的事物

对象:

  • 有属性(数据)
  • 有行为(方法)

Dart、Flutter 都是强面向对象体系


二、面向对象三大特性概览

特性 解决的问题
封装 隐藏细节,控制使用方式
继承 复用代码,建立层级关系
多态 面向抽象编程,解耦逻辑

接下来我们逐一拆解。


三、封装(Encapsulation)

1️⃣ 什么是封装?

封装的核心是:

只暴露"该暴露的",隐藏"不该关心的"


2️⃣ Dart 中的封装体现

dart 复制代码
class User {
  final String _password;

  User(this._password);
}
  • _password 是私有属性
  • 外部无法直接访问

📌 下划线 _ 是 Dart 的私有约定(库级私有)。


3️⃣ 为什么要封装?

  • 防止误用
  • 降低耦合
  • 提高安全性

Flutter 中的很多类:

👉 你只能用,不能乱改


四、继承(Inheritance)

1️⃣ 什么是继承?

继承表示:

子类拥有父类的属性和方法


2️⃣ Dart 中的继承

复制代码
class Animal {
  void move() {
    print('moving');
  }
}

class Dog extends Animal {
  void bark() {
    print('bark');
  }
}

Dog:

  • 自动拥有 move
  • 还可以新增自己的行为

3️⃣ 重写(override)

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

📌 用 @override 明确表示重写父类行为。


五、多态(Polymorphism)

这是最重要、也是最抽象的一点。


1️⃣ 什么是多态?

一句话理解:

同一个方法,不同对象,有不同表现


2️⃣ 多态示例

复制代码
abstract class Animal {
  void move();
}

class Dog extends Animal {
  @override
  void move() {
    print('Dog runs');
  }
}

class Bird extends Animal {
  @override
  void move() {
    print('Bird flies');
  }
}

3️⃣ 面向抽象编程

复制代码
void makeMove(Animal animal) {
  animal.move();
}

这里:

  • 不关心具体类型
  • 只关心是否遵守 Animal 规则

📌 这就是多态的精髓。


六、三大特性如何协同工作?

来看一个完整示例:

复制代码
abstract class Shape {
  double area();
}

class Circle extends Shape {
  final double r;

  Circle(this.r);

  @override
  double area() {
    return 3.14 * r * r;
  }
}

class Square extends Shape {
  final double side;

  Square(this.side);

  @override
  double area() {
    return side * side;
  }
}

统一使用:

复制代码
void printArea(Shape shape) {
  print(shape.area());
}

📌 这就是:

  • 封装:隐藏计算细节
  • 继承:共享 Shape 规则
  • 多态:不同形状不同实现

七、Flutter 为什么大量依赖三大特性?

Flutter 本质上是:

一个由无数 Widget 组成的面向对象系统

  • Widget 是抽象概念
  • StatelessWidget / StatefulWidget 是继承
  • build 方法是多态

你学到这里,已经站在了 Flutter 设计的门口。


八、新手常见误区

❌ 过度继承

❌ 类层级太深

❌ 用继承解决所有问题

📌 Flutter 更偏向:

组合 > 继承

(这个思想后面会专门讲)


九、这一篇你真正掌握了什么?

你已经不再是:

  • "堆代码"
  • "背语法"

而是在:

  • 设计结构
  • 抽象问题
  • 理解框架思想

这是质变


十、总结

本篇你系统掌握了:

  • 面向对象三大特性
  • Dart 中的具体体现
  • Flutter 架构背后的思想

🔜 下一篇预告

《Flutter 零基础入门(十六):Widget 基础概念与第一个 Flutter 页面》

下一篇开始:

🚀 正式进入 Flutter UI 世界

你将第一次:

  • 写 Flutter Widget
  • 理解 build 方法
  • 看懂 Flutter 页面是如何构成的
相关推荐
剪刀石头布啊2 分钟前
js数组之快速组、慢数组、密集数组、稀松数组
前端
Ro Jace6 分钟前
计算机专业基础教材
java·开发语言
代码游侠22 分钟前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
mango_mangojuice24 分钟前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
devmoon30 分钟前
运行时(Runtime)是什么?为什么 Polkadot 的 Runtime 可以被“像搭积木一样”定制
开发语言·区块链·智能合约·polkadot·runtmie
时艰.31 分钟前
Java 并发编程 — 并发容器 + CPU 缓存 + Disruptor
java·开发语言·缓存
子春一36 分钟前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏
忆~遂愿1 小时前
GE 引擎进阶:依赖图的原子性管理与异构算子协作调度
java·开发语言·人工智能
Days20501 小时前
简单处理接口返回400条数据本地数据分页加载
前端
沐知全栈开发1 小时前
API 类别 - 交互
开发语言