Flutter 抽象类、接口与mixin

抽象类、接口与mixin

核心对比

抽象类 接口 mixin
关键字 abstract class 无,用 abstract class / class mixin
使用方式 extends implements with
多继承 仅单继承 可实现多个接口 可使用多个 mixin
有无构造函数
可否实例化
能力复用 子类可复用抽象类中已实现的方法 不可复用 可复用
方法是否必须重写 抽象方法必须 所有 可选
使用场景 定义基类 定义行为规范 工具类

抽象类

通过 abstract class 关键字定义。

dart

typescript 复制代码
	// 抽象类:定义动物规范
	abstract class Animal {
	  // 成员变量
	  String name;

	  // 构造函数
	  Animal(this.name);

	  // 抽象方法(必须实现)
	  void makeSound();

	  // 普通方法(已有实现,可直接用)
	  void eat() {
	    print("$name is eating");
	  }
	}

	// 子类继承抽象类
	class Dog extends Animal {
	  // 调用父类构造
	  Dog(String name) : super(name);

	  // 必须实现抽象方法
	  @override
	  void makeSound() {
	    print("Woof!");
	  }
	}

	void main() {
	  // Animal(); ❌ 抽象类不能实例化
	  final dog = Dog("Buddy");
	  dog.makeSound(); // Woof!
	  dog.eat();       // Buddy is eating
	}

特性

  • 不能实例化,使用 extends 继承
  • 可继承抽象类的所有成员(变量 & 方法)
  • 子类需实现所有抽象方法,可选择性的覆写抽象类中已实现的方法
  • Dart 为单继承语言

设计目的

提供通用能力 + 规范,通常用于定义基类,如 BaseWidget

接口

Dart 中无 interface 关键字,通过 abstract classclass 定义的类既是抽象类,也是接口。

objectivec

csharp 复制代码
	class Flyable {
	  void fly();
	}

特性

  • 需实现接口中的所有成员(变量 & 方法)
  • 可实现多个接口
  • 不能继承 class 中已实现的方法

设计目的

定义规范 + 约束。当类 A 想实现类 B 中的 API,而不想继承 B 的实现时,可通过 A implements B 实现。

mixin(混入)

是一种横向复用代码的机制,通过 mixin 定义,with 使用。

objectivec

scala 复制代码
	mixin Logger {
	  void log(String message) {
	    print('LOG: $message');
	  }
	}

	class UserService with Logger {
	  void createUser() {
	    log('User created');
	  }
	}

特性

  • 可定义变量、方法
  • 通过 on 关键字约束使用范围,如 mixin A on State,只有 State 及其子类可使用 mixin A。
  • 冲突处理:后混入的会覆盖先混入的同名成员

设计目的

  • 不破坏类层级
  • 可组合使用多个能力
  • 架构解耦
相关推荐
Kevin Coding2 分钟前
JsonConvert:适用于 Android、鸿蒙与 Flutter 的 JSON 转 Model 插件
android·flutter·harmonyos
iFlyCai15 小时前
Flutter原理深度解析:从架构到渲染的全面剖析(二)
flutter·flutter 三棵树
里欧跑得慢17 小时前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
iFlyCai1 天前
深入理解Flutter:StatefulWidget生命周期全解析(一)
flutter·dart·状态管理·statefulwidget
xiangxiongfly9151 天前
Flutter video_player总结
flutter·video_player·chewie
见山是山-见水是水2 天前
鸿蒙版 Flutter Video 视频播放组件:播放控制、全屏切换与倍速播放
flutter·音视频·harmonyos
六年码农2 天前
2026最新开源 屏译ScreenTranslator 0.4.4 开源 全屏实时翻译教程
运维·人工智能·flutter·开源
WeiAreYoung2 天前
Flutter+iOS 实现 Live Activity
flutter·ios
恋猫de小郭2 天前
超好用 R8 Configuration Analyzer, 优化你的 App 大小和内存
android·前端·flutter
键盘飞行员3 天前
Flutter App 全套实战学习计划:从零搭建到 APK 部署
学习·flutter