abstract功能
用于定义抽象合约,供其他合约继承使用
abstract作用
- 抽象合约将合约的定义与其实现脱钩,从而提供了更好的可拓展性;
- 简化了诸如Template方法的模式,并消除了代码重复;
abstract规则
- 如果未实现合约中的至少一项功能,则需要将合约标记为抽象;
- 即使实现了所有功能,合约也可以被标记为抽象的;
- 抽象合约不能实例化;
- 如果合约继承自抽象合约,并且没有通过覆盖实现所有未实现的功能,则也需要将其标记为抽象;
- 抽象合同不能覆盖未实现的函数;
具体代码如下
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.7;
//导入其他文件
import "./IUser.sol";
//继承
abstract contract absUser is IUser{
// function addUser(string memory _name,uint8 _age) override external{
// }
function getUser(string memory _name)override external view returns(string memory,uint8){
}
}
contract User is absUser{
function addUser(string memory _name,uint8 _age) override external{
}
}
我们可以看到这里通过abstract定义了抽象合约,之后通过继承实现了抽象函数中的getUser方法,然后自己又实现了addUser的方法。这里就是通过abstract关键字实现了合约的继承和拓展的设计,其实也就是由继承者去实现。