contract A {
function foo() public pure virtual returns(string memory) {
return "A";
}
}
contract B is A {
function foo() public pure virtual override returns(string memory) {
return "B";
}
}
contract C is A {
function foo() public pure virtual override returns(string memory) {
return "C";
}
}
contract D is B, C {
function foo() public pure virtual override(B, C) returns(string memory) {
return super.foo();
}
}
contract F is A, B {
function foo() public pure virtual override(A, B) returns(string memory) {
return super.foo();
}
}
// test G,result is "C"
contract G is D, F {
function foo() public pure virtual override(D, F) returns(string memory) {
return super.foo();
}
}
contract H is F, D {
function foo() public pure virtual override(F, D) returns(string memory) {
return super.foo();
}
}
为什么G和H的结果都是“C”?
规则:
// 合约可以继承自多个父合约。
// 当一个函数被调用时在
中定义了多次// 不同合约,父合约从中查找
// 从右到左,深度优先。
那么为什么 G 不是“B”?