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 小时前
【C++进阶】STL算法与函数对象 - 09 函数对象保存状态并复用规则
开发语言·c++·算法·stl·函数对象
程序员黑豆5 小时前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
hsjiasb8 小时前
FreeRTOS学习(二十七)——任务栈与栈溢出检测
开发语言·stm32·学习·学习笔记·freertos
bugcome_com8 小时前
JWT 知识小课堂:从入门到精通,一文吃透 JSON Web Token
前端·json
To_OC8 小时前
写了三天 Next.js,我的 React 世界观被拆了又装回去
前端·全栈·next.js
独泪了无痕8 小时前
viewer.js 安装与配置指南:实现图片预览功能
前端·vue.js
丰锋ff8 小时前
3.1 Qt事件之事件处理器
开发语言·qt
多弗朗皮卡丘9 小时前
C语言梦开始的地方7:函数
c语言·开发语言
月华路9 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
gugucoding9 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言