通学智能合约系列(十七)--函数的重写与自我销毁
Posted 通学技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通学智能合约系列(十七)--函数的重写与自我销毁相关的知识,希望对你有一定的参考价值。
hello,大家好,通学智能合约系列文档已经出栏了,关注微信公众号【通学技术】,回复{智能合约}即可获取,大家快来领取吧~~~~~~~~~~~~~~~~~~~~~~~~~~~~~··
19、继承中函数的重载重写
在这节内容中,视频中的老师讲的有点问题,此处应当是重写,而不是重载。相信学过java或者其他面向对象的小伙伴们都清楚,重载和重写的区别吧。
我们来看看solidity
的例子一吧
pragma solidity ^0.4.16;
contract Father{
uint money = 10000;
}
contract Son is Father{
uint money = 20000;
function getMoney() view returns(uint){
return money;
}
}
执行结果:
我们的儿子合约继承了父亲合约后,通过money
的属性重写了父类中的money
属性。所以最终执行了getMoney
函数后,结果是20000
.
我们再来看一个例子二
pragma solidity ^0.4.16;
contract Father{
uint public money = 10000;
}
contract Son is Father{
uint money = 20000;
function getMoney() view returns(uint){
return money;
}
}
大家发现,我的例子二中,在父合约的属性中加了public
修饰符,此时的执行结果:
那么,我们再来看看这个例子三:
pragma solidity ^0.4.16;
contract Father{
uint public money = 10000;
}
contract Son is Father{
uint public money = 20000;
function getMoney() view returns(uint){
return money;
}
}
此时的执行结果:
此处,儿子合约中使用了public
修饰符,结果money
函数结果显示为2个达不溜。这里,也是重写
导致的,这都是满满地细节啊。
上面我们说了属性的重写,其实也是重写的属性的get
方法。
那下面我们看看方法的重写。
pragma solidity ^0.4.16;
contract Father{
uint public money = 10000;
function noSmoking() view returns(string){
return "I don't smoke,and I do not drink";
}
}
contract Son is Father{
uint public money = 20000;
function noSmoking() view returns(string){
return "I do not smoke,but I do drink";
}
function test() view returns(string){
return noSmoking();
}
}
执行结果:
我们可以看到,儿子也重写了父亲的方法,杭州的小伙伴们,有空可以一起约生啤呀~~~~~~~~
这节内容,也比较简单,就到这里吧。
20、基因杂交–多重继承
我们都知道,有些孩子生下来眼睛像爸爸,嘴巴像妈妈,这是因为孩子同时继承了父亲的基因和母亲的基因。
我们java
不支持多重继承,但是solidity
,它是支持多重继承的,那他怎么写呢?想必难不倒聪明的你,我们一起来看看吧~
pragma solidity ^0.4.16;
contract Father{
uint public money = 10000;
uint public height = 180;
}
contract Mother{
uint public money = 20000;
uint public height = 170;
uint public weight = 120;
}
contract Son is Father,Mother{
}
我们用儿子去集成了父亲,和目前,所以儿子就具备父亲和目前所有的属性,这是没有问题的。
但是针对上述的身高属性,儿子是父亲还是目前的呢?你肯定会说,是继承父亲的,因为父亲比较高。那答案真的是这样吗?
我们发现,这个执行结果都是跟随母亲的,难道是儿子亲母亲,儿女亲父亲的缘故?醒醒,我们是开发人员,讲逻辑的,那他这个结果是怎么来的呢? 眼睛鼻一分钟,留给你思考。
显然,是因为继承顺序的问题
,我们先继承了父亲,后继承了目前,相同属性,当然是会覆盖的。就是这么简单。
21、合约的销毁
生老病死,是自然规律,我们的合约既然有生,也必然有死。那么想要销毁合约,该如何做呢?
pragma solidity ^0.4.16;
contract DestructTest{
address ower;
function DestructTest(){
ower = msg.sender;
}
uint money = 10000;
function increment() view{
money += 10000;
}
function kill(){
if(msg.sender == ower){
// 自我销毁
selfdestruct(ower);
}
}
}
上面演示了一个只有当前账号等于部署者的时候,才能自我销毁的例子。
合约的销毁很简单,一句话,自我销毁selfdestruct(arg)
,哦,别忘了,要加一个参数哦;
好了,到这里,我们solidity的函数就告一段落了,前面的知识也都相对来说比较简单,大家不要轻易放弃呀。
通学技术,学通技术,面向区块链编程,构建可信社会。
以上是关于通学智能合约系列(十七)--函数的重写与自我销毁的主要内容,如果未能解决你的问题,请参考以下文章