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 页面是如何构成的
相关推荐
a1117763 小时前
医院挂号预约系统(开源 Fastapi+vue2)
前端·vue.js·python·html5·fastapi
0思必得03 小时前
[Web自动化] Selenium处理iframe和frame
前端·爬虫·python·selenium·自动化·web自动化
virus59454 小时前
悟空CRM mybatis-3.5.3-mapper.dtd错误解决方案
java·开发语言·mybatis
初次见面我叫泰隆4 小时前
Qt——3、常用控件
开发语言·qt·客户端
灰灰勇闯IT4 小时前
Flutter for OpenHarmony:图标与 Asset 资源管理 —— 构建高性能、可维护的视觉资源体系
flutter
无小道5 小时前
Qt——QWidget
开发语言·qt
时艰.5 小时前
Java 并发编程之 CAS 与 Atomic 原子操作类
java·开发语言
子春一5 小时前
Flutter for OpenHarmony:构建一个 Flutter 记忆翻牌游戏,深入解析状态管理、动画交互与经典配对逻辑
flutter·游戏·交互
行走的陀螺仪5 小时前
uni-app + Vue3编辑页/新增页面给列表页传参
前端·vue.js·uni-app
梵刹古音5 小时前
【C语言】 函数基础与定义
c语言·开发语言·算法