继承
- 支持多继承
- 重写父级函数
- 父合约中的方法加上了
virtual
则表示子合约可以重写 - 子合约重写父合约中的方法时需加上
override
关键字 - 多继承时,某个方法同时存在于多个父合约
- 父合约中的方法加上了
- 调用父级函数:
super.func()
或者父合约名.func()
- 子合约中不能通过声明相同的变量来覆盖父级合约中的变量
// 创建合约X
contract X {
string public name;
constructor(string memory _name) {
name = _name;
}
// 定义可重写方法
function getName() public virtual view returns(string memory){
return name;
}
}
// 创建合约Y
contract Y {
string public text;
constructor(string memory _text) {
text = _text;
}
}
// 多继承,并通过参数形式调用父级合约的构造函数
contract B is X("Input to X"), Y("Input to Y") {
// 重写父级函数
function getName() public override view returns(string memory){
// 调用父级函数
return super.getName();
}
}
// 多继承, 子合约在构造函数调用父级构造函数,可以指定调用顺序,为 X, Y, C
contract C is X, Y {
constructor(string memory _name, string memory _text) X(_name) Y(_text) {}
}