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。
  • 冲突处理:后混入的会覆盖先混入的同名成员

设计目的

  • 不破坏类层级
  • 可组合使用多个能力
  • 架构解耦
相关推荐
MonkeyKing71552 小时前
Flutter路由高级管理实战:守卫、深链、多栈与Tab路由全解析
flutter
里欧跑得慢1 天前
CSS 嵌套:编写更优雅的样式代码
前端·css·flutter·web
里欧跑得慢1 天前
CSS变量与自定义属性详解
前端·css·flutter·web
xmdy58661 天前
Flutter+开源鸿蒙实战|校园易生活Day1 项目初始化搭建+开发环境校验+工程目录规范+第三方库集成+多端屏幕适配+全局底部导航
flutter·开源·harmonyos
MonkeyKing1 天前
Flutter国际化与多主题实战:多场景示例,一键适配多语言+多风格
flutter
MonkeyKing1 天前
iOS设计模式
flutter
xmdy58661 天前
Flutter+开源鸿蒙实战|校园易生活Day2 第三方库批量集成+全局Toast提示+网络状态监听+首页轮播图+资讯卡片布局
flutter·开源·harmonyos
恋猫de小郭1 天前
Flutter 3.44 发布前夕,官方宣布 SwiftPM 将完全取代 CocoaPods
android·前端·flutter
张风捷特烈1 天前
状态管理大乱斗#06 | Riverpod 源码评析 (下) - 外功心法
android·前端·flutter