通学智能合约系列(十八)--函数的重写与自我销毁

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的函数就告一段落了,前面的知识也都相对来说比较简单,大家不要轻易放弃呀。

通学技术,学通技术,面向区块链编程,构建可信社会。

以上是关于通学智能合约系列(十八)--函数的重写与自我销毁的主要内容,如果未能解决你的问题,请参考以下文章

通学智能合约系列(十八)--memory与storage

通学智能合约系列(十三)--函数1

通学智能合约系列(十三)--函数1

通学智能合约系列(十四)--函数2

通学智能合约系列(十四)--函数2

通学智能合约系列(十五)--函数修改器modifier