32多线继承

inheritance顺序:

从积累到派生之间的关系

继承更少的合约放在更前面

更加接近于基础的写前面

eg1:

​ X

​ / |

Y |

​ \ |

​ Z

order: X, Y,Z

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

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

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

    function baz() 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 y() public pure  returns (string memory){
        return "Y";
    }

}
//X,Y继承顺序很重要
contract Z is X,Y{
    function foo() public pure override(X,Y)  returns (string memory){
        return "Z";
    }
    function bar() public pure override(Y,X)  returns (string memory){
        return "Z";
    }
}

eg2:

​ X

​ / \

Y A

| |

| B

​ \ |

​ Z

order: X,Y,A,B,Z

(YA同级)