【Solidity】Is继承
跟大部分是编程语言一样,Solidity也有继承的功能,好处就是同样的功能继承之后就能使用,无需重新封装。在Solidity的继承功能,凡是允许子合约继承能够覆盖的function,在父合约当中都必须加上virtual。
代码范例
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
//A是父合约
contract A {
//允许子合约能够override的话,必须加上virtual,否则就无法覆盖
function getName() public pure virtual returns(string memory) {
return "A";
}
}
//B继承了A合约
contract B is A{
function getParentName() public pure returns(string memory){
//获取父合约当中的getName()
return super.getName();
}
//为了让BC合约能够覆盖,所以这function也必须加上virtual
function getName() public pure virtual override returns(string memory){
//覆盖了父合约当中的getName()
return "B";
}
}
//C继承了A合约
contract C is A{
//为了让BC合约能够覆盖,所以这function也必须加上virtual
function getName() public pure virtual override returns(string memory){
//覆盖了父合约当中的getName()
return "C";
}
}
//BC同时继承了B和C合约
contract BC is C,B {
function get_BC_ParentName() public pure returns(string memory){
//获取父合约当中的getName(), 是获取B合约的,同时继承多个,则拿最后一个继承的合约为主
return super.getName();
}
function getName() public pure override(B,C) returns(string memory){
//覆盖了B和C父合约当中的getName()
return "BC";
}
}
![]()
Facebook评论