我正在学习固定性,并了解到interface
和abstract
都是可能包含未使用的函数的类。
我的疑问是:在可靠的智能合同中interface
和abstract contract
有什么区别?
如果合同的功能中至少有一个没有实现,则将其标识为抽象合同。这是抽象类的唯一要求。因此,它们不能被编译。但是,它们可以用作基础合同,其他合同可以从中继承。
与其他语言不同,稳健合同不需要abstract
关键字即可标记为摘要。相反,任何至少有一个未实现功能的合同都被视为坚固性的抽象。除非抽象合同具有正在执行的合同,否则它既不能编译也不能部署
contract MyAbstractContract {
function myAbstractFunction() public pure returns (string);
}
如果约定继承抽象约定,并且未实现所有未实现的功能,则该约定也将被视为抽象
//MyContract is also abstract
contract MyContract is MyAbstractContract {
function myAbstractFunction() public pure returns (string)
}
但这不是抽象的,因为我们正在实现该函数。
contract MyContract is MyAbstractContract {
function myAbstractFunction() public pure returns (string)
{ return "string value to return"; }
}
ANabstract contract
既可以有已实现的函数,也可以有未实现的函数。
接口只能有未实现的功能。此外,它们既不编译也不部署。
接口不能实现它们的任何函数。所有接口函数都是隐式虚拟的 使用关键字Interface
定义接口。
接口不能继承其他协定或接口,但其他协定可以从接口继承。
接口不能定义构造函数
接口不能有状态变量
到目前为止,接口不能定义结构和枚举,但可能很快就会更改。