Solidity - 抽象合约

2025 年 5 月 27 日 | 4 分钟阅读

与其他编程语言不同,solidity 也有抽象合约的概念。在 Solidity 中,抽象合约是可以被其他合约使用的容器。

本教程将涵盖有关抽象合约的所有细节,包括其定义、语法、示例及其说明。 让我们开始吧!

涵盖的主题

  • 什么是抽象合约?
  • 语法
  • 示例
  • 注意事项

什么是抽象合约?

"抽象合约是 Solidity 合约,其中包含至少一个没有实现的函数。它们也用于用户未指定基本合约构造函数任何参数的情况。另一个合约可以继承此合约并实现其自己的代码。"

抽象合约是其他合约可以使用的容器。它们用作父合约,因此其所有变量和函数都可以被子合约继承和使用。 抽象合约通常用于用户不想直接添加任何合约,从而创建合约的情况。

抽象合约无法编译,因为它缺少实现代码,但可以用作基本合约。 因此,无法在 Solidity 中创建抽象合约的实例。 它仅定义您的合约的结构,继承的子合约进一步提供函数的实现。

语法

可以使用 abstract 关键字在 solidity 中声明抽象合约。 语法如下所示

示例

示例 1:演示抽象合约示例,同时使用抽象合约和另一个使用该合约的合约。

使用合约

示例:在下面的 Solidity 代码中,创建了一个名为“AbstractExample' 的抽象合约。 抽象合约充当父合约,并进一步由另一个名为“childContract”的子合约继承。 默认情况下,子合约拥有继承抽象合约函数的全部权限。 让我们探索一下如何完成它。

要获取输出,首先编译如下所示的代码

Solidity- Abstract Contracts

如果直接部署代码,它将显示警告错误,指出“此合约可能是抽象的,它可能未完全实现抽象父合约的方法,或者它可能未正确调用继承合约的构造函数。”

要防止这种情况,请转到“部署”选项,从“合约”字段中选择“objectContract”。 选择它后,部署代码。

Solidity- Abstract Contracts

转到你的合约并单击 gVal 方法,你将在控制台窗口中获得以下输出。 参考下图

Solidity- Abstract Contracts

说明

如果你注意到抽象合约 'AbstractExample' 仅定义你的合约的结构,其中包含三个不同的函数,但没有任何实现。 合约是一个抽象合约,其中包含一些没有实现的函数。 继承的子合约* 'childContract' * 进一步提供了函数的实现。 gVal()setVal() 函数声明用于从合约中获取值,而 sum() 函数用于将从 setValues() 函数中检索到的两个给定数字相加。

稍后,我们正在创建一个 AbstractExample 'abe' 的对象,它在 call 合约中创建了 childContract 的一个实例,该合约使用合约的变量并调用父类的函数。

注意事项

  1. 抽象合约至少包含一个未实现的函数
  2. 抽象合约既包含已实现的函数,也包含抽象函数。
  3. 它们无法编译,因为它们缺少实现代码,但可以用作父合约,其函数和变量可以被子合约进一步使用。
  4. 另一个合约可以继承抽象合约并实现其自己的代码。
  5. 不能在 Solidity 中创建抽象合约的实例。