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

solidity多态【很重要】

多态是面向对象编程(OOP)的一个核心概念,允许不同类的对象被视为同一类型的实例,并根据实际类型来响应相同的方法调用。

这意味着同一个接口可以用来引用属于不同类的对象,而这些对象可以有自己的方法实现,这些实现可以在运行时被动态地调用,而不是在编译时。多态性增加了程序的灵活性和可扩展性。

多态有两种主要形式:

  1. 编译时多态(静态多态)
    编译时多态,也称为静态多态,是通过方法重载和运算符重载实现的。

这意味着在编译时就确定了将要执行哪个方法,通常依赖于方法的参数列表(方法的名称相同,但参数的数量或类型不同)。

方法重载(Overloading)

在同一个类中定义多个同名方法,但是它们的参数列表不同(参数的数量或类型不同)。

根据传递给方法的参数类型和数量,编译器决定调用哪个方法。


  1. 运行时多态(动态多态)
    运行时多态,也称为动态多态,是通过方法重写(Override)实现的,它允许子类提供一个特定于自己的实现,覆盖父类的方法。

在这种情况下,到底调用哪个方法是在程序运行时根据对象的实际类型动态决定的。

方法重写(Overriding)

子类重写继承自父类的方法。当通过父类引用调用该方法时,实际调用的方法取决于对象的实际类型。

这是通过使用虚方法(virtual methods)和方法重写(method overriding)来实现的,其中子类的方法会覆盖父类的同名方法。

基本语法

在Solidity中,多态性通过继承和函数重写实现。

子类使用override关键字来指明它重写了父类中的函数。

父类可以使用virtual 关键字来指名他允许子类,重写方法。

基本使用方式 - 方法重载

这是通过使用虚方法(virtual methods)和方法重写(method overriding)来实现的,其中子类的方法会覆盖父类的同名方法。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;contract BaseContract {function name() public pure virtual returns (string memory) {return "BaseContract name";}
}contract Xm is BaseContract {function name() public pure override returns (string memory) {return "Xm name";}
}contract Xl is BaseContract {function name() public pure override returns (string memory) {return "Xl name";}
}

修饰器重载

函数修改器可以相互重载。 这与 函数重载 的工作方式相同(除了对修改器没有重载)。

virtual 关键字必须用在被重载的修改器上, override 关键字必须用在重载的修改器上:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract A {modifier test() virtual{_;}
}contract B is A{modifier test() override {_;}
}

多重继承的重载

在多重继承的情况下,必须明确指定所有的直接基类合约。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract A {function getValue() public pure virtual returns (string memory) {return "A";}
}contract B {function getValue() public pure virtual returns (string memory) {return "B";}
}contract C is B,A  {function getValue() public pure override( B,A) returns (string memory) {return super.getValue();}
}

相关文章:

solidity多态【很重要】

多态是面向对象编程(OOP)的一个核心概念,允许不同类的对象被视为同一类型的实例,并根据实际类型来响应相同的方法调用。 这意味着同一个接口可以用来引用属于不同类的对象,而这些对象可以有自己的方法实现&#xff0c…...

Jangow-1.0.1靶机漏洞复现(未完成)

首先,这个靶机只能使用VirtualBox打开,靶机下载地址为 https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 虚拟机软件下载地址为 Download_Old_Builds – Oracle VM VirtualBox 开启靶机后访问ip进入如下页面,点击site进入到一个…...

软件测试--python基础

一、python基础 (1)第一个python (2)python解释器 (3)基础语法 ①字面量 什么是字面量 常用的值类型 字符串 ②注释 ③变量 什么是变量 变量的特征 变量的目的是存储运行过程的数据 存储的目的是为了:重复使用 ④数据类型 type()语句 变量有类型吗?…...

GPIO子系统

1. GPIO子系统视频概述 1.1 GPIO子系统的作用 芯片内部有很多引脚,这些引脚可以接到GPIO模块,也可以接到I2C等模块。 通过Pinctrl子系统来选择引脚的功能(mux function)、配置引脚: 当一个引脚被复用为GPIO功能时,我们可以去设…...

学会这个Python库,接口测试so easy

前言 我们在做接口测试时,大多数返回的都是json属性,我们需要通过接口返回的json提取出来对应的值,然后进行做断言或者提取想要的值供下一个接口进行使用。 但是如果返回的json数据嵌套了很多层,通过查找需要的词,就…...

Stable Diffusion4.8.7(Ai绘画)软件安装教程

软件下载 [名称]:Stable Diffusion4.8.7(Ai绘画) [大小]:16.52GB [语言]:简体中文 [安装环境]:Win11/Win10/Win8/Win7 [硬件要求]:CPU2.0GHz ,内存4G(或更高&#x…...

操作系统错误处理

错误处理 1、通过函数的返回值表示执行错误: // 返回合法值表示成功 返回非法值表示失败 // 计算大小、查找 long file_size(const char* path) {FILE* fp fopen(path,"r");if(NULL fp)return -1; // 返回非法值fseek(fp,SEEK_END,0);long size …...

【靶场实操】sql-labs通关详解----第一节:基础注入方式(Less-1~Less-10)

目录 一、注入方式简要概括 1.1 SQL常见注入方式 1.2 爆破函数 二、靶场实操 2.1 Less-1 2.1.1 判断类型 2.1.2 联合注入查询 2.2 Less-2 2.2.1 判断类型 2.2.2 注入攻击 2.2.3 字符型与数字型漏洞对比 2.3 Less-3 2.3.1 判断 2.3.2 注入 2.4 Less-4 2.4.1 判断…...

力扣676.实现一个魔法字典

力扣676.实现一个魔法字典 字典树 dfs class Trie{public:Trie* next[26];bool is_end false;};class MagicDictionary {public:Trie* root new Trie();void add(string& word){Trie* p root;for(char c:word){if(p->next[c-a] NULL) p->next[c-a] new Trie…...

ctfshow-web入门-sql注入(web171-web175)

目录 1、web171 2、web172 3、web173 4、web174 5、web175 1、web171 单引号测一下,报错 -- 闭合后回显正常 也可以用 # ,不过需要 URL 编码 成功闭合之后,先判断下字段数: 1 order by 3-- 3 的时候正常 4 的时候报错&am…...

视频怎么添加音乐?分享5种视频添加音乐方法

在如今火爆的短视频时代,为视频添加合适的背景音乐,无疑是让其脱颖而出的关键一步。无论是打造个人Vlog、纪录片,还是创意短片,音乐都能赋予视频独特的情感与氛围。那么怎么给视频添加上背景音乐呢?给大家分享5种简单的…...

黑马JavaWeb后端案例开发(包含所有知识点!!!)

目录 1.准备工作 环境搭建 开发规范 REST(REpresentation State Transfer),表述性状态转换,它是一种软件架构风格 注意事项 统一响应结果 2.部门管理功能 查询部门 删除部门 新增部门 RequestMapping 3.员工管理功能 分页查询 批…...

FPGA开发——蜂鸣器实现音乐播放器的设计

一、概述 我们在进行蜂鸣器的学习的时候,总会在想既然蜂鸣器能够发出声音,那么它能够播放音乐吗,今天这篇我们文章我们就一起来学习怎样使用使用蜂鸣器来播放音乐,也就是怎样成为一个音乐播放器。 1、蜂鸣器的类型 在设计的时候…...

InnoDB存储引擎(1)

InnoDB存储引擎的优点 InnoDB在设计时考虑到了处理大数据量时的性能,支持事务,回滚和崩溃修复的能力,通过多版本并发控制来减少锁定(降低了锁的争用),同时还支持外键的约束;通过缓冲池在内存中缓存数据来提高查询的性能&#xff…...

VMWare虚拟机共享主机的网络访问外网

1.主机中启动客户端并连接外网 2.设置虚拟网络类型为NAT 3.启动虚拟并通过主机访问外网...

LeetCode Easy|【415. 字符串相加】

力扣题目链接 题目本身难度不大,但是后续的一些补充内容还是值得搞清楚的 主要的逻辑如下: 其实本题的目的就是让我们来模拟我们的竖式加法。所以很直观的一个想法就是使用双指针:分别指向两个 num 的末尾。随后就会产生一些问题&#xff1a…...

RAG 革命:NVIDIA 工作站如何成为企业 AI 的秘密武器

在深圳的一家科技初创公司,首席技术官李梅正在向她的团队展示一个令人兴奋的新项目。“看这个,” 她指着屏幕上的实时演示说,“我们刚刚用公司的技术文档训练了一个 AI 助手,它现在可以回答任何关于我们产品的问题,而且…...

九大原则,轻松构建个人高效SOP

1、原则一、工作汇报SOP SCQA模型(升职加薪的关键!) 清晰定义问题和提出解决方案 类别 关键词 解读 S - Situation 情景 陈述项目背景,目标,愿景 C - Complication 冲突 讲卡点,讲冲突 Q - Question 疑问-问题 这些冲…...

Airtest的demo实现多设备并行

Airtest的demo实现多设备并行 它实现是的获取adb连接上的所有设备,然后在每一台设备上跑给定的测试用例,跑完之后生成单机的测试报告,最后再汇总这些单机测试报告的结果,形成汇总(聚合)报告: 同…...

社区养老服务小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,服务人员管理,服务产品管理,服务预约管理,服务状态管理,服务退订管理,活动管理,视频管理 微信端账号功能包…...

Interceptor拦截器开发

因为1登录后的接口都需要token验证代码,会出现重复代码;2当前的接口不防刷,会被恶意攻击 所以在controller层增加请求拦截,如果你的token不合法,就不让你做后续的处理了 拦截器的作用是什么 作用: 1、对controller层代码的访问进行拦截,合法的请求,那此层代码就处理,反…...

美团 AIGC产品经理面经(已拿 offer)

背景:211本科毕业,毕业之后在北京一家中型电商公司做了3年商家后台产品经理,目前通过老薛的朋友关系拿到了美团的offer。 目前还有几家在面试流程中,继续加油💪 美团AIGC产品面经-业务面 💥1、自我介绍&a…...

@RequestBody与@RequestParam

RequestBody会将请求体中的数据,转换成对象.最主要的是RequestBody就是要返回Json的字符串!!! RequestParam会从http请求查询参数中提取数据! RequestParam和RequestBody是Spring Framework中用于处理HTTP请求的注解…...

vmware上,虚机经常丢失网卡。导致无法上网。

1、winR 输入 services.msc 2、重启这两个服务。 VMware NAT service和VMware DHCP service...

git 鉴权失败

这条错误信息通常出现在使用Git进行远程操作时,比如克隆仓库、拉取更新或推送代码。错误的含义是: HTTP Basic: Access denied:访问被拒绝。The provided password or token is incorrect:提供的密码或令牌不正确。Your account …...

[C++] 容器适配器:深入理解Stack与Queue的底层原理

文章目录 容器适配器简介deque的缺陷为什么使用deque作为stack和queue的底层默认容器 stack和queue的简单讲解Stack(栈)栈的操作图示栈的相关接口 Queue(队列) Stack和Queue的模拟实现Stack(栈)作为容器适配…...

Eclipse maven 的坑

在使用 eclipse 时, eclipse 的右下角 一直在提示 “JPA java change event handler” ,eclipse使用起来很卡,解决办法 问题描述: 在使用 eclipse时, eclipse 的右下角 一直在提示 “JPA java change event handler”…...

多模态视觉大语言模型——LLaVA

论文题目:Visual Instruction Tuning 论文地址:https://arxiv.org/abs/2304.08485 github: https://github.com/haotian-liu/LLaVA 1. Abstract 本文首次尝试使用GPT-4生成多模态指令数据,并基于这些数据训练了LLaVA(Large Language and Vision Assistant)模型,这是一种结…...

服务注册到nacos上,不能点击下线的问题处理

nacos不能下线: 修改 /usr/local/mid/nacos/data 文件夹下 protocol 文件重命名为 protocol_bak,然后再重启nacos nacos单机启动命令:cd sh startup.sh -m standalone nginx启动命令:cd /usr/local/mid/nginx/sbin ./…...

未来3-5年,哪些工作会被AI取代

一篇由高盛经济学家约瑟夫布里格斯 (Joseph Briggs)和德维西科德纳尼 (Devesh Kodnani)撰写的报告指出,全球预计将有3亿个工作岗位被生成式AI取代。 报告称:“最近出现的生成式人工智能将降低劳动力成本和…...

深圳 旅游 网站建设/今日最新新闻重大事件

为了便于项目中对发布的版本进行回滚,所以我们每次发布完成以后自动创建git tag。 1,创建一个Jenkins任务,命名成为push_tag_demo; 2,配置《源码管理》,这里配置比较特殊的地方需要仓库的名字,后面创建tag的时候需要使…...

怎么做淘宝店网站收录/免费开发软件制作平台

大数组的排序 之前有一个同事问我,如何对一个非常大的数组进行排序,最开始的思路是:化整为零 合并排序。但实际上具体的一些细节还是有待商榷,因此 这里写一篇文章来具体来总结一下。 问题 假如一个数组中有1亿个数字,那么要对这个数组从小到大进行排序,我们该如何操作&#…...

php网站后台管理模板/网络营销的优势有哪些

在Java中我们常使用Comparable接口来实现排序,其中compareTo是实现该接口方法。我们知道compareTo返回0表示两个对象相等,返回正数表示大于,返回负数表示小于。同时我们也知道equals也可以判断两个对象是否相等,那么他们两者之间是…...

java做网站和php做网站/内蒙古网站seo

由胡润百富、36计联合华润置地主办的2017“胡润百富中国行”深圳站暨粤港澳大湾区全球价值链高峰论坛,于9月26日在深圳前海华侨城JW万豪酒店举行。“粤港澳大湾区”作为国家战略,在“一带一路”的战略设计下,全球价值异常凸显,此次…...

wordpress程序怎么搬家/莆田网站建设优化

原文为知乎问题 《在你自学计算机的路上,哪些书籍对你的帮助最大?》的回答,稍有修改。如有兴趣,可进入原问题查看相关讨论:https://www.zhihu.com/question/421913237/answer/1527439809 在你自学计算机的路上,哪些书…...

没有备案的网站怎么访问不了/职业培训学校

2019独角兽企业重金招聘Python工程师标准>>> 1、假如当前mysql密码为 nihao123! 写脚本检测mysql服务是否正常(比如 可以进入mysql 里 执行 show processlist),并检测当前mysql是主还是从,如果是从,则判断 它 的主是否正常,如果是主,则什么也不做&#…...