contract a is b1, b2 { function baz() public returns (uint64) { // this will return 100 return super.foo(); } function foo() internal override(b1, b2) returns (uint64) { return 2; } } abstract contract b1 { function foo() internal virtual returns (uint64) { return 100; } } abstract contract b2 { function foo() internal virtual returns (uint64) { return 200; } }