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

Loading

Facebook评论