30-Solidity8.0-多线继承

393 阅读1分钟

源码:

pragma solidity ^0.8.7;

//order of inheritance - most base-lke to derived

/*
    X
  / |
Y   |
  \ |
    Z
*/
//order of most base like to derived
// X, Y, Z

/*
    X
  /  \
Y     A
|     |
|     B
  \   /
    Z

X, Y, A, B, Z
*/

contract X {
    function foo() public pure virtual returns (string memory) {
        return "X";
    }

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

    function x() public pure virtual returns (string memory) {
        return "X";
    }
}

contract Y is X {
    function foo() public pure virtual override returns (string memory) {
        return "Y";
    }

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

    function x() public pure virtual override returns  (string memory) {
        return "Y";
    }
}

contract Z is X, Y {
    function foo() public pure override(X, Y) returns (string memory) {
        return "X";
    }

    function bar() public pure  override(X, Y)  returns (string memory) {
        return "X";
    }

    function x() public pure override(X, Y)  returns (string memory) {
        return "X";
    }
}