假设你有一个基本合约 a,你想创建一个新的合约 b,它继承自 a。这可以通过使用is关键字实现。
继承例子
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract BaseContract {
// 父合约的成员变量和方法
string name = "hello";
function getNane() external view returns (string memory){
return name;
}
}
contract DerivedContract is BaseContract {
// 部署这个合约,则可以,调用BaseContract的方法
}
多重继承
当你使用多重继承时,需要列出所有父合约,使用 , 隔开。
父合约是按照它们被列出的顺序被继承的,这个顺序可以影响到函数解析以及父合约构造函数的调用顺序
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract A {
uint256 count;
function getCount() public view returns (uint256) {
return count;
}
}
contract B {
uint256 value;
function getValue() public view returns (uint256) {
return value;
}
}
contract Name is A, B {}
继承后, 带构造方法的类
当你继承一个包含构造函数的合约时,你需要确保所有父合约的构造函数都被正确地调用并初始化。
Solidity提供了几种方式来实现这一点:
1. 在继承列表中指定父合约构造函数的参数。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract A {
uint256 count;
function getCount() public view returns (uint256) {
return count;
}
constructor(uint256 _co) {
count = _co;
}
}
contract B {
uint256 value;
function getValue() public view returns (uint256) {
return value;
}
constructor(uint256 _co) {
value = _co;
}
}
contract Name is A(100), B(200) {
}
2. 直接在子合约的构造函数,调用父合约的构造函数 - 外部传入方式
继承多合约例子 的构造方法, -外部传入
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract A {
uint256 count;
function getCount() public view returns (uint256) {
return count;
}
constructor(uint256 _co) {
count = _co;
}
}
contract B {
uint256 value;
function getValue() public view returns (uint256) {
return value;
}
constructor(uint256 _co) {
value = _co;
}
}
contract Name is A, B {
constructor(uint256 _a, uint256 _b) A(_a) B(_b) {
}
}