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