在下面的代码中,Solidity会报错:“Linearization of inheritance graph impossible”。code
// 如下代码没法编译 pragma solidity >=0.4.0 <0.7.0; contract X {} contract A is X {} contract C is A, X {}
缘由是C
要求X
来重写A
(定义A
,X
这个顺序),但A
自己的要求重写X
,这是一个矛盾,不能解决。继承
多继承和线性化(Multiple Inheritance and Linearization)。Solidity是沿用Python的方式, 使用C3线性化,在基类的DAG强制使用特定的顺序。这致使单调但不容许某些继承关系。特别是,在is
指令中给出父类的顺序很重要。ip
一个简单的规则是要指定父类中的顺序从左到右为“most base-like”到“most derived”。it