hello,大家好,通学智能合约系列文档已经出栏了,关注微信公众号【通学技术】,回复{智能合约}即可获取,大家快来领取吧~~~~~~~~~~~~~~~~~~~~~~~~~~~~~··

19、继承中函数的重载重写

在这节内容中,视频中的老师讲的有点问题,此处应当是重写,而不是重载。相信学过java或者其他面向对象的小伙伴们都清楚,重载和重写的区别吧。

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

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

我们来看看​​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;
}
}

执行结果:

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

我们的儿子合约继承了父亲合约后,通过​​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​​修饰符,此时的执行结果:

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

那么,我们再来看看这个例子三:

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;
}
}

此时的执行结果:

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

此处,儿子合约中使用了​​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();
}
}

执行结果:

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

我们可以看到,儿子也重写了父亲的方法,杭州的小伙伴们,有空可以一起约生啤呀~~~~~~~~

这节内容,也比较简单,就到这里吧。

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{


}

我们用儿子去集成了父亲,和目前,所以儿子就具备父亲和目前所有的属性,这是没有问题的。

但是针对上述的身高属性,儿子是父亲还是目前的呢?你肯定会说,是继承父亲的,因为父亲比较高。那答案真的是这样吗?

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

我们发现,这个执行结果都是跟随母亲的,难道是儿子亲母亲,儿女亲父亲的缘故?醒醒,我们是开发人员,讲逻辑的,那他这个结果是怎么来的呢? 眼睛鼻一分钟,留给你思考。

显然,是因为​​继承顺序的问题​​,我们先继承了父亲,后继承了目前,相同属性,当然是会覆盖的。就是这么简单。

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

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