31继承

一个合约可以继承另一个合约

要在父合约中标记哪些function是可以重写的virtual

在子合约中标记哪些function是重写的override

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

//父合约
// 要在父合约中标记哪些function是可以重写的virtual
contract A{
    function foo() public pure virtual returns (string memory){
        return "A";
    }

    function bar() public pure virtual returns (string memory){
        return "A";
    }

    function baz() public pure returns (string memory){
        return "A";
    }
}
// 子合约
contract B is A{
    function foo() public pure override  returns (string memory){
        return "B";
    }

    function bar() public pure override  returns (string memory){
        return "B";
    }

}

image-20231127144858811

此时有C合约,继承B合约

C合约重写B合约中的foo方法,B合约中的foo要标注上virtual

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

//父合约
// 要在父合约中标记哪些function是可以重写的virtual
contract A{
    function foo() public pure virtual returns (string memory){
        return "A";
    }

    function bar() public pure virtual returns (string memory){
        return "A";
    }

    function baz() public pure virtual returns (string memory){
        return "A";
    }
}
// 子合约
contract B is A{
    function foo() public pure virtual  override  returns (string memory){
        return "B";
    }

    function bar() public pure override  returns (string memory){
        return "B";
    }

}
contract C is B{
    function foo() public pure override  returns (string memory){
        return "C";
    }
}