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 方法中使用日志记录功能。​​​​​​​        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用内网穿透工具 frp 发布内网 web 站点

使用内网穿透工具 frp 发布内网 web 站点 文章目录 使用内网穿透工具 frp 发布内网 web 站点一、基础环境二、适用场景三、过程和方法四、参考资料 版权声明:本文为CSDN博主「杨群」的原创文章,遵循 CC 4.0 BY-SA版权协议,于2024年7月20日首…

MySQL练手 --- 1251. 平均售价

题目链接:1251. 平均售价 思路: 由题意可知,Prices表和UnitsSold表,表的连接关系为一对一,连接字段(匹配字段)为product_id 要求:查找每种产品的平均售价。而Prices表含有价格还有…

【简历】吉林某一本大学:JAVA秋招简历指导,简历通过率比较低

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一份吉林某一本大学25届计算机专业同学的Java简历。因为学校是一本,所以求职目标以中厂为主。因为学校背景在中厂是正常…

MySQL查询优化:提升数据库性能的策略

在数据库管理和应用中,优化查询是提高MySQL数据库性能的关键环节。随着数据量的不断增长,如何高效地检索和处理数据成为了一个重要的挑战。本文将介绍一系列优化MySQL查询的策略,帮助开发者和管理员提升数据库的性能。 案例1: 使用索引优化查…

Oracle(21)什么是聚集索引和非聚集索引?

在数据库管理系统中,索引是一种用于加速数据检索的结构。主要有两种类型的索引:聚集索引(Clustered Index)和非聚集索引(Non-Clustered Index)。它们在数据存储和检索方面有不同的实现和用途。 聚集索引&a…

自学YOLO前置知识

YOLO前置知识 学习YOLO(You Only Look Once)之前,掌握一些前置知识会帮助你更好地理解和应用该技术。以下是一些推荐的前置知识领域: 计算机视觉基础: 图像处理:了解图像的基本处理技术,如滤波…

【Linux】gcc简介+编译过程

gcc是Linux系统下一款专门针对于C语言的代码编译软件。g则是Linux下针对于CPP语言的代码编译软件,实际上g底层也大量用了gcc代码。 目录 1.gcc基本认识与安装2.gcc编译过程2.1编译 和 链接2.2编译步骤形成的原因2.3编译器的自举2.4链接 1.gcc基本认识与安装 gcc是一…

Neuron协议网关的北向应用插件开发

目录 概述 指令处理层开发​ 应用层开发​ .open​ .close​ .init​ .uninit​ .start​ .stop​ .setting​ .request​ 插件设置文件​ 适配华为的思路 概述 最近研究了一段时间的Neuron协议网关,前面的博文也提到它虽然能够把数据发到华为的IoT平台上…

Adobe国际认证详解-从零开始学做视频剪辑

从零开始学做视频剪辑,是许多初学者面临的挑战。在这个数字媒体时代,视频剪辑已经成为一种重要的技能,无论是个人爱好还是职业发展,掌握视频剪辑技能都是非常有价值的。 视频剪辑,简称“剪辑”,是视频制作过…

高三了,无计算机基础能学计算机吗?

高三阶段学习计算机编程是完全可行的,即使你没有任何计算机基础。我收集制作一份C语言学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的学习方向,包括了编程教学,数据处理,通信处理,技…

《算法笔记》总结No.11——数字处理(上)欧拉筛选

机试中存在部分涉及到较复杂数字的问题,这是编码的基本功,各位一定要得心应手。 目录 一.最大公约数和最小公倍数 1.最大公约数 2.最小公倍数 二.素数 1.判断指定数 2.输出所有素数 3.精进不休——埃拉托斯特尼筛法 4.达到更优!——…

测试开发面试题---JVM

JAVA的内存区域 程序计数器:线程私有的,保存当前线程的字节码文件。JAVA虚拟机栈:包含局部变量信息,用于方法的调用和执行。本地方法栈:与JAVA虚拟机栈类似,但只服务于本地方法。堆:所有线程共…

VMWare 16 安装

1、下载地址 VMware-workstation-full-16.2.4-20089737 2、激活码 VM16:ZF3R0-FHED2-M80TY-8QYGC-NPKYF 3、安装步骤 修改一下【安装位置】,将【增强型键盘驱动程序(需要重新引导以使用此功能()此功能要求主机驱动器上具有 10MB 空间。】【将 wMware…

使用ChatGPT来撰写和润色学术论文的教程(含最新升级开通ChatGpt4教程)​​

现在有了ChatGPT4o更加方便了, 但次数太少了 想要增加次数可以考虑升级开桶ChatGpt4​​ ( OPENAI4 可以减2刀) 一、引言 在学术研究中,撰写高质量的论文是一项重要的技能。本教程将介绍如何利用ChatGPT来辅助完成从论文构思到润色的全过程…

Hadoop 重要监控指标

某安卓逆向课程打包下载(92节课) ​​https://pan.quark.cn/s/53cec8b8055a ​​ 某PC逆向课程(100节课打包下载) ​​https://pan.quark.cn/s/e38f2b24f36c​​ Hadoop 是一个开源的分布式存储和计算框架,广泛应用…

JUC-synchorized与锁原理、锁的升级与膨胀

syn-ed 是一个可重入、不公平的重量级锁;synchronized使用对象锁保证了临界区代码的原子性,无论使用synchorized锁的是代码块还是方法,其本质都是锁住一个对象。 同步代码块,锁住的是括号里的对象同步方法 普通方法,…

Adobe“加速”创意人士开启设计新篇章

近日,Adobe公司宣布了其行业领先的专业设计应用程序——Adobe Illustrator和Adobe Photoshop的突破性创新。这一重大更新不仅为创意专业人士带来了前所未有的设计可能性和工作效率提升,还让不论是插画师、设计师还是摄影师,都能从中受益并创作…

GO内存分配详解

文章目录 GO内存分配详解一. 物理内存(Physical Memory)和虚拟内存(Virtual Memory)二. 内存分配器三. TCMalloc线程内存(thread memory)页堆(page heap)四. Go内存分配器mspanmcachemcentralmheap五. 对象分配流程六. Go虚拟内存ArenaGO内存分配详解 这篇文章中我将抽丝剥茧,…

Redisson中RQueue的使用场景附一个异步的例子

RQueue 是一个基于 Redis 的分布式作业队列系统,它允许开发者在 Ruby 应用程序中实现异步任务处理和计划任务调度。由于 Redis 提供了高性能的内存数据结构存储,RQueue 可以快速地存储和检索队列中的任务,这使得它非常适合于高并发和低延迟的…

【Langchain大语言模型开发教程】评估

🔗 LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Example generation 2、Manual evaluation and debug 3、LLM-assisted evaluation 4、LangChain evaluation platform 1、引包、加载环境变量; import osfrom dotenv imp…