Solidity 中构造函数与父类构造函数的初始化
在 Solidity 中,构造函数(constructor)是一种特殊函数,只在合约部署时执行一次,常用于设置初始状态。而当一个合约继承了父合约之后,构造函数也承担了初始化父类的职责。
本文将介绍 Solidity 中如何在构造函数中初始化父类构造函数,并结合示例帮助理解。
🧱 基础语法:构造函数的定义
在 Solidity 中定义构造函数的语法如下:
但如果该合约继承自其他合约,而且这些父合约的构造函数带参数,我们还需要在构造函数的声明后显式调用父类的构造函数:
🎯 示例:继承 ERC20 和 ERC20Permit
我们来看一个经典例子,在开发 ERC20 代币时经常会继承多个标准合约,如:
在这个例子中:
-
ERC20(name, symbol)是对ERC20父合约构造函数的调用。 -
ERC20Permit(name)是对ERC20Permit父合约构造函数的调用。
这两段调用会在子合约构造函数执行之前自动先行调用,用于完成父合约的初始化。
✅ 完整示例
这种写法等同于其他语言中的「调用父类构造函数」,如 C++、Java 中的 super(...)。
❗ 忘了初始化会怎样?
如果你忘记调用带参数的父类构造函数,Solidity 编译器会直接报错,例如:
所以只要父类的构造函数不是空的,就必须在子类构造函数中显式调用。
📌 总结
-
Solidity 的构造函数只执行一次,在部署合约时调用;
-
如果合约继承了带参数构造函数的父类,必须在构造函数声明后手动调用父类构造函数;
-
写法是
constructor(...) Parent1(...) Parent2(...) {}; -
类似于其他语言中的
super(...)调用逻辑。

浙公网安备 33010602011771号