is: 用来表示继承关系
super: 在 child 中调用parent
virtual: 表示某个方法可以在child中被override
override: 表示某个 parent 的方法在child 中可以被重新定义
跟java太像了。
一个例子:
contract Parent { function sayHi() public pure virtual returns (string memory) { return "hihihi from parent"; } } contract Child is Parent { function sayHi() public pure override returns(string memory) { return super.sayHi(); } }
可以看到,
virtual 和 override 必须同时使用。 位于 returns 左边挨着。如果不用的话,会被提示无法编译:
还可以多重继承,例如:
contract Child is Parent1, Parent2 ...