当前位置: 首页 > news >正文

Flutter开发Dart 中的 mixin、extends 和 implements

目录

​​​​​​​前言

1.extends

2.implements

3.mixin


前言

        在 Dart 中,mixin、extends 和 implements 是面向对象编程中常用的关键字,它们分别用于不同的继承和实现方式。理解它们的用法和区别对于编写高质量、可维护的 Dart 代码至关重要。本文将详细介绍这三个关键字的用法,并通过实例展示它们在实际编程中的应用。

1.extends

        extends 关键字用于类的继承。子类可以继承父类的所有属性和方法,并且可以重写父类的方法。继承是类之间的一种 “is-a” 关系,例如,Dog 类继承自 Animal 类,那么 Dog 是一种 Animal。

class Animal {
  void eat() {
    print('Animal is eating');
  }
}

class Dog extends Animal {
  void bark() {
    print('Dog is barking');
  }

  // 重写父类的方法
  @override
  void eat() {
    print('Dog is eating');
  }
}

void main() {
  Dog dog = Dog();
  dog.eat();  // Dog is eating
  dog.bark(); // Dog is barking
}

        在上面的示例中,Dog 类继承了 Animal 类,并重写了 eat 方法。同时,Dog 类还增加了一个新的方法 bark。

2.implements

        implements指的是接口实现。

        与 extends 不同,implements 要求实现类实现接口中所有的方法和属性,而不是继承它们的实现。接口实现是一种 “can-do” 关系。

abstract class Animal {
  void eat();
}

class Dog implements Animal {
  @override
  void eat() {
    print('Dog is eating');
  }

  void bark() {
    print('Dog is barking');
  }
}

void main() {
  Dog dog = Dog();
  dog.eat();  // Dog is eating
  dog.bark(); // Dog is barking
}

   在上面的示例中,Dog 类实现了 Animal 接口,并提供了 eat 方法的具体实现。同时,Dog 类还可以定义自己的方法 bark。

3.mixin

        mixin 关键字用于实现代码的重用。与 extends 和 implements 不同,mixin 提供了一种将多个类的功能组合到一起的方法,而不需要使用继承。mixin 类本质上是一个普通的类,但不能有构造函数。

mixin Fly {
  void fly() {
    print('Flying');
  }
}

mixin Swim {
  void swim() {
    print('Swimming');
  }
}

class Duck with Fly, Swim {}

void main() {
  Duck duck = Duck();
  duck.fly();  // Flying
  duck.swim(); // Swimming
}

    在上面的示例中,Duck 类使用 with 关键字混入了 Fly 和 Swim 两个 mixin,从而获得了 fly 和 swim 方法。

        在实际开发中,mixin 可以用于将多个功能混合到一个类中,从而避免多重继承的问题。例如,可以创建一个具有日志记录功能的 mixin 并将其混入到需要日志记录功能的类中。

mixin Logger {void log(String message) {print('Log: $message');}
}class Database with Logger {void save(String data) {log('Saving data: $data');}
}void main() {Database db = Database();db.save('Sample data');  // Log: Saving data: Sample data
}

        在上面的示例中,Database 类混入了 Logger mixin,从而获得了 log 方法,可以在 save 方法中使用日志记录功能。​​​​​​​        

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux--网络基础
  • 设计模式 之 —— 单例模式
  • 数据库系列
  • ZLMRTCClient配置说明与用法(含示例)
  • web前端 React 框架面试200题(三)
  • pytest+allure
  • 《Java初阶数据结构》----4.<线性表---Stack栈和Queue队列>
  • vue上传Excel文件并直接点击文件列表进行预览
  • 学习笔记10:bos、cos和对象存储 的区别
  • yarn的安装与配置
  • 身份证如何查验真伪?C#身份证二要素、三要素接口集成
  • BACnet物联网关BL103:Modbus协议转BACnet/MSTP
  • 2024秋招算法
  • py Qt5学习记录
  • LINUX客户端client(socket、connect,write)实现客户端发送,服务器接收
  • 【comparator, comparable】小总结
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CSS中外联样式表代表的含义
  • Java多线程(4):使用线程池执行定时任务
  • laravel5.5 视图共享数据
  • Phpstorm怎样批量删除空行?
  • Sublime text 3 3103 注册码
  • swift基础之_对象 实例方法 对象方法。
  • tab.js分享及浏览器兼容性问题汇总
  • Terraform入门 - 1. 安装Terraform
  • vue:响应原理
  • 第十八天-企业应用架构模式-基本模式
  • 如何进阶一名有竞争力的程序员?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 消息队列系列二(IOT中消息队列的应用)
  • 一、python与pycharm的安装
  • 阿里云服务器购买完整流程
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ###C语言程序设计-----C语言学习(6)#
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (k8s)kubernetes集群基于Containerd部署
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读30/100)Convolutional Pose Machines
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)模仿学习-Action数据的模仿
  • (算法)硬币问题
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (轉)JSON.stringify 语法实例讲解
  • ***详解账号泄露:全球约1亿用户已泄露
  • .bat文件调用java类的main方法
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET C# 配置 Options
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net 中viewstate的原理和使用
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .net/c# memcached 获取所有缓存键(keys)