当前位置: 首页 > 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 方法中使用日志记录功能。​​​​​​​        

相关文章:

Flutter开发Dart 中的 mixin、extends 和 implements

目录 ​​​​​​​前言 1.extends 2.implements 3.mixin 前言 在 Dart 中,mixin、extends 和 implements 是面向对象编程中常用的关键字,它们分别用于不同的继承和实现方式。理解它们的用法和区别对于编写高质量、可维护的 Dart 代码至关重要。本文…...

SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)

1. 背景 在 SAPUI5 中,Fragments 是一种轻量级的 UI 组件,类似于视图(Views),但它们没有自己的控制器(Controller)。Fragments 通常用于定义可以在多个视图中重用的 UI 片段,从而提…...

express连接mysql

一、 安装express npm install express --save二、express配置 //引入 const express require("express"); //创建实例 const app express(); //启动服务 app.listen(8081, () > {console.log("http://localhost:8081"); });三、安装mysql npm i m…...

24暑假算法刷题 | Day24 | LeetCode 93. 复原 IP 地址,78. 子集,90. 子集 II

目录 93. 复原 IP 地址题目描述题解 78. 子集题目描述题解 90. 子集 II题目描述题解 93. 复原 IP 地址 点此跳转题目链接 题目描述 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用…...

Postman本地化测试全攻略:打造多语言API的秘诀

Postman本地化测试全攻略:打造多语言API的秘诀 在全球化的今天,许多应用程序都需要支持多语言环境,以满足不同地区用户的需求。API的本地化测试是确保应用程序能够在不同语言和区域设置下正确运行的关键环节。Postman作为一个强大的API开发和…...

摆弄it:越走越深

在英语中,it是一个单词,就是“它”,这是众所周知的事情。今天,我们就来摆弄一下it,摆弄一下“它”,看看能摆弄出什么名堂来。 一、它是它自己 it 大家都知道,同样,itself&#xff0…...

网页上空格

  no-break space(普通的英文半角空格但不换行) 中文全角空格 (一个中文宽度)   en空格(半个中文宽度)   em空格 (一个中文宽度) 四分之一em空格 (四分之一中文宽度) 相比平时的空格(),&nbsp拥有不间断(non-breaking)特性。即连续…...

Linux服务管理(四)Apache服务

Apache服务 1、基于IP的虚拟主机2、基于IP端口的虚拟主机3、基于域名的虚拟主机4、prefork模式5、worker模式6、event模式7、细说驱动工作模式和MPM(多处理模块)工作模式 新旧域名都保留,因为旧域名已有一定的知名度和流量,直接下…...

Qt基础 | TCP通信 | TCP服务端与客户端程序设计 | QTcpServer | QTcpSocket

文章目录 一、TCP 通信1.TCP 通信概述2.TCP 服务器端程序设计2.1 主窗口定义与构造函数2.2 网络监听与 socket 连接的建立2.3 与 TCP 客户端进行数据通信 3.TCP 客户端程序设计3.1 主窗口定义与构造函数3.2 与服务器端建立 socket 连接3.3 与 TCPServer 的数据收发 4.小结 Qt 网…...

设计模式实战:订单处理系统的设计与实现

问题描述 设计一个订单处理系统,支持订单的创建、处理、取消和通知功能。系统需要确保订单处理流程的灵活性和可扩展性。 设计分析 命令模式 命令模式用于将请求封装成对象,从而使我们可以用不同的请求、队列或日志来参数化其他对象。订单处理系统中的每个操作(创建订单…...

[论文笔记]思维链提示的升级版——回退提示

引言 今天又带来一篇提示策略的论文笔记:TAKE A STEP BACK: EVOKING REASONING VIA ABSTRACTION IN LARGE LANGUAGE MODELS。 作者提出了回退提示(STEP-BACK PROMPTING)技术,使大模型能够进行抽象,从包含具体细节的实例中推导出高层次的概念…...

【Redis进阶】主从复制

1. 主从结构引入 在分布式系统中,涉及到一个严重问题:单点问题 即如果某个服务器程序只有一个节点(单台机器提供服务),就会出现以下两个问题: 可用性问题,如果这台机器挂了,意味着…...

编程类精品GPTs

文章目录 编程类精品GPTs前言种类ChatGPT - GrimoireProfessional-coder-auto-programming 总结 编程类精品GPTs 前言 代码类的AI, 主要看以下要点: 面对含糊不清的需求是否能引导出完整的需求面对完整的需求是否能分步编写代码完成需求编写的代码是否具有可读性和可扩展性 …...

ubuntu在命令行输出里查找内容,dmesg

直接执行查看日志指令会出来很多页。dmesg为开机日志信息。记录了开机时硬件的过程 sudo dmesg 执行结果: 可以用竖号“|”,在前一条命令返回的内容进行查找。下图为查找bluetooth sudo dmesg |grep -i bluetooth...

图片url处理(带http和不带http)方法

后端返回的接口数据,图片路径,有的是相对路径,有的是带http的路径 得处理一下,如果是相对路径就拼上服务器的地址(xxx),如果是带http的路径就正常显示 方法: imageUrl(url){let str RegExp(http);let ne…...

Git(分布式版本控制系统)、Gitlab、分支、分支冲突

目录 1.Git概述 2.Git的功能特性 3.Github社区和Gitlab 1.Github社区 2.Gitlab 4.Git的安装及配置 1.Git安装 2.配置Git环境 3.常用指令 4. 建立git仓库 1.创建一个目录 2.初始化当前目录仓库 3.查看隐藏文件 4.新建文件并添加到缓存 5.提交文件到仓库 6.查看历…...

dockerfile部署镜像 ->push仓库 ->虚拟机安装建木 ->自动部署化 (详细步骤)

目录 创建私服仓库 vi /etc/docker/daemon.json vim deploy.sh判断脚本内容 创建 建木 后端部署 命名空间 设置密码用户名 创建git仓库 gitignore文件内容 图形项目操作 git maven docker镜像 点击流程日志 vim /etc/docker/daemon.json 执行部署脚本 ip 开发…...

Android串口开发及读取完整数据的解决方法

串口发送实质就是向串口设备写入、读取字节流,和文件的操作很相似,安卓官方已经提供了android-serialport-api,在开源社区上也有很多衍生项目可以借鉴,本文介绍其中一种用法。 添加依赖 在Module下的 build.gradle 中添加: implementation com.aill:A…...

java之对象向下转型

java中,向下转型是为了重新获得因为向上转型而丢失的子类特性。在先下转型前,必须先进行向上转型。 语法格式如下 父类类型 父类对象子类实例 子类类型 子类对象(子类)父类对象 示例代码如下 class Animal01 {public void sh…...

ElasticSearch核心之DSL查询语句实战

什么是DSL? Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。 DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。目前常用的框架查询方法什么的底层都是构建DSL语句实现的,所以你必…...

intv_ai_mk11实战手册:构建AI增强型Confluence知识库——自动打标签+关联推荐

intv_ai_mk11实战手册:构建AI增强型Confluence知识库——自动打标签关联推荐 1. 项目背景与价值 在现代企业知识管理中,Confluence作为广泛使用的知识库平台,面临着内容组织效率低下的挑战。传统手动分类和标签管理方式存在三个核心痛点&am…...

Mermaid 可视化工具:提升开发效率的图表编辑解决方案

Mermaid 可视化工具:提升开发效率的图表编辑解决方案 【免费下载链接】vscode-mermaid-preview Previews Mermaid diagrams 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mermaid-preview 在软件开发过程中,技术文档的编写往往需要插入各…...

ClickHouse可视化工具大比拼:Tabix vs DBeaver,哪个更适合你?

ClickHouse可视化工具深度评测:Tabix与DBeaver的实战对比 当你面对ClickHouse海量数据时,一个得心应手的可视化工具能让你事半功倍。作为目前最流行的两款ClickHouse客户端,Tabix和DBeaver各有拥趸,但究竟哪款更适合你的工作场景…...

iOS 15+ 设备越狱实战指南:A8-A11 芯片全流程适配方案

iOS 15 设备越狱实战指南:A8-A11 芯片全流程适配方案 【免费下载链接】palera1n Jailbreak for A8 through A11, T2 devices, on iOS/iPadOS/tvOS 15.0, bridgeOS 5.0 and higher. 项目地址: https://gitcode.com/GitHub_Trending/pa/palera1n 一、问题诊断&…...

从概念到工具:实战构建基于clawhub skill的个人技能管理体系

最近在整理自己的技能树时,发现需要一个能直观管理个人技术栈的工具。尝试用clawhub skill框架搭建了一套解决方案,配合InsCode(快马)平台的快速部署能力,三天就做出了可实际使用的技能看板。记录下关键实现思路,或许对同样想系统…...

Wan2.2-I2V-A14B数据预处理流水线:使用OpenCV自动化处理输入图像

Wan2.2-I2V-A14B数据预处理流水线:使用OpenCV自动化处理输入图像 1. 为什么需要图像预处理 在图像生成视频(I2V)的流程中,输入图像的质量直接影响最终视频的生成效果。就像做菜前需要洗净切好食材一样,对原始图像进行…...

Qwen3.5-9B保姆级教程:从Conda环境到Gradio WebUI完整部署

Qwen3.5-9B保姆级教程:从Conda环境到Gradio WebUI完整部署 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,具备强大的逻辑推理、代码生成和多轮对话能力。该模型特别之处在于支持多模态理解(图文输入)和超长上下文…...

深入解析PEB结构:为什么隐藏调试器能解决x64dbg的MS_VC_EXCEPTION问题

深入解析PEB结构:为什么隐藏调试器能解决x64dbg的MS_VC_EXCEPTION问题 调试器与反调试技术的博弈一直是Windows系统底层开发中的经典话题。当你在x64dbg中遇到406D1388或E06D7363这类异常时,可能已经踩中了调试检测的陷阱。本文将带你从PEB结构出发&…...

提升openclaw开发效率:用快马一键生成算法调试与可视化工具

最近在优化openclaw机械爪控制算法时,发现调试过程特别耗时。每次修改参数后,都要重新编译代码、运行测试,还要手动记录数据。为了提升效率,我用InsCode(快马)平台快速搭建了一个可视化调试工具,效果出乎意料的好。分享…...

Qwen3-14B私有部署商业应用:替代SaaS服务降本提效的真实测算

Qwen3-14B私有部署商业应用:替代SaaS服务降本提效的真实测算 1. 私有部署的商业价值 在当今企业数字化转型浪潮中,大语言模型的应用已经成为提升效率的关键工具。然而,依赖第三方SaaS服务不仅成本高昂,还存在数据安全和响应速度…...