📘

[Solidity] 親が継承している関数を子で `override` したらどうなるか?

2023/02/20に公開

(タイトルで何を言っているか理解できた人は神)

下記みたいなケースのことです。気になったので調べてみた。

  • CAfoo() を上書き
  • Bhoge() を実行すると、 Aよ or Cです どっち?
contract A {
    function foo() public pure virtual returns (string memory) {
        return "Aよ";
    }
}

contract B is A {
    function hoge() public pure virtual returns (string memory) {
        return foo();
    }
}

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

【結論】 Cです と出力される

どうやら子で上書きした内容が優先されるみたいです。

Discussion