跳到主要内容

继承

  • 支持多继承
  • 重写父级函数
    • 父合约中的方法加上了 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) {}
}