solidity - 继承(Inheritance)

  • arrom
  • 更新于 2022-11-10 18:27
  • 阅读 2205

solidity - 继承(Inheritance)

继承(Inheritance)

1.合约之间的继承使用关键字 is 2.父合约的方法想被子合约继承则需要使用关键virtual 3.子合约想覆盖父合约的方法则需要使用关键字override 4.在子合约中调用父合约需要使用关键字super 5.继承遵循最远继承,后面继承的会覆盖前面的方法

contract A {
    event Log(string message);

    function foo() public virtual {
        emit Log("A.foo called");
    }

    function bar() public virtual {
        emit Log("A.bar called");
    }
}

contract B is A {
    function foo() public virtual override {
        emit Log("B.foo called");
        A.foo();
    }

    function bar() public virtual override {
        emit Log("B.bar called");
        super.bar();
    }
}

contract C is A {
    function foo() public virtual override {
        emit Log("C.foo called");
        A.foo();
    }

    function bar() public virtual override {
        emit Log("C.bar called");
        super.bar();
    }
}

contract D is B, C {
    function foo() public override(B, C) {
        super.foo();
    }

    function bar() public override(B, C) {
        super.bar();
    }
}
  • 调用foo的时候,由于B,C中的foo都没有使用super,所以只是覆盖问题,根据最远继承,C 覆盖了B,所以执行顺序为:D -> C -> A
  • 调用bar的时候,由于B,C中的bar使用了super,此时D的两个parent都需要执行一遍,因此为D-> C -> B -> A
点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
arrom
arrom
江湖只有他的大名,没有他的介绍。