Все хотели узнать но боялись спросить…
Язык Solidity поддерживает множественное наследование. А значит присутствует проблема ромбовидного наследования.
А значит ее как-то решали в Solidity.
Суть такая — приоритет у тех контрактов, которые справа.
Проще на практике:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
pragma solidity ^0.4.13; contract A { function giveMeEat() constant returns (string); } contract B { function giveMeEat() constant returns (string) { return "eggs"; } } contract C { function giveMeEat() constant returns (string) { return "cake"; } } contract D is C, B { } |
Если выполнить giveMeEat из контракта D, то он вернет «eggs».
А теперь поменяем местами C и B в наследовании D
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
pragma solidity ^0.4.13; contract A { function giveMeEat() constant returns (string); } contract B { function giveMeEat() constant returns (string) { return "eggs"; } } contract C { function giveMeEat() constant returns (string) { return "cake"; } } contract D is B, C { } |
Если выполнить giveMeEat, то теперь он вернет «cake».
По конструкторам и деструкторам сложнее, добавлю позже. Принцип тот же но есть тонкие моменты.