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

设计目的

  • 不破坏类层级
  • 可组合使用多个能力
  • 架构解耦
相关推荐
yume_sibai2 小时前
02-Flutter进阶开发
前端·flutter
●VON4 小时前
Flutter 鸿蒙插件适配实战:用 is_lock_screen 2.0.0 判断真实锁屏状态
flutter·华为·harmonyos
●VON5 小时前
Flutter 鸿蒙插件适配实战:用 flutter_timezone_observer 1.2.0 监听系统时区变化
flutter·华为·harmonyos
●VON5 小时前
Flutter 鸿蒙 app_install_date 0.1.5 使用实战:读取应用安装时间
flutter·华为·harmonyos
●VON7 小时前
Flutter 鸿蒙插件适配实战:flutter_screenshot_detect 0.1.7 截图事件监听
flutter·华为·harmonyos·鸿蒙
西西学代码1 天前
尾灯-应用层通信协议(BLE)
flutter
恋猫de小郭1 天前
iPhone Duo 适配详解,需要改变的不止是布局模型
前端·flutter·ios
我就是DaLing呀!1 天前
flutter + ffmpeg_kit_extended_flutter 大视频合并下载
flutter·ffmpeg·音视频
程序员老刘2 天前
Dart Skills CLI 1.0发布,老刘年初的预言兑现了
flutter·ai编程·dart