virtual 和 override 相当于重写父类的方法,作用和 java 的一样。
virtual- 父合约中的函数,如果希望子合约重写,需要加上
virtual关键字。
- 父合约中的函数,如果希望子合约重写,需要加上
override- 子合约重写了父合约中的函数,需要加上
override关键字。
- 子合约重写了父合约中的函数,需要加上
注意:用 override 修饰 public 变量,会重写与变量同名的 getter 函数,例如:
mapping(address => uint256) public override balanceOf;合约如下
1 | pragma solidity ^0.8.0; |
部署 Test 合约,部署完成,调用变量
C0
name""
t""
调用 test 函数,这几个值变为
C1
nametest
t""
说明,重写方法后,父函数就不再执行。如果想要执行父方法,可以使用 super。
1 | pragma solidity ^0.8.0; |