📅  最后修改于: 2023-12-03 15:20:11.058000             🧑  作者: Mango
在 Solidity 中,继承是一种让一个合约从另一个合约获取代码的方式。继承可以使合约更加模块化,有了继承,可以把一些公共的代码放在一个合约里面,让其他合约来继承这个合约,从而避免重复代码和重复的工作。
使用 is
声明继承关系,如下所示:
contract Base {
// 父合约的代码
}
contract Derived is Base {
// 子合约的代码
}
在这个例子中,Derived
是从 Base
合约继承而来的。
子合约可以覆盖父合约的方法,如下所示:
contract Base {
function hello() public pure returns(string memory) {
return "hello";
}
}
contract Derived is Base {
function hello() public pure returns(string memory) {
return "hi";
}
}
在这个例子中,Derived
合约中的 hello
方法覆盖了 Base
合约中的 hello
方法。当在 Derived
合约中调用 hello
方法时,将返回字符串 "hi"
。
使用 super
关键字可以访问父合约的方法和数据成员,如下所示:
contract Base {
uint public variable = 123;
function getVariable() public view returns(uint) {
return variable;
}
}
contract Derived is Base {
function getVariable() public view returns(uint) {
uint baseVariable = super.getVariable();
return baseVariable + 456;
}
}
在这个例子中,Derived
合约中的 getVariable
方法通过调用 super.getVariable()
来访问父合约的 getVariable
方法,并对父合约的返回值进行修改,在返回之前加上了 456
。当在 Derived
合约中调用 getVariable
方法时,将返回 579
。
Solidity 支持多重继承,一个合约可以继承多个合约,如下所示:
contract A {
function a() public pure returns(string memory) {
return "A";
}
}
contract B {
function b() public pure returns(string memory) {
return "B";
}
}
contract C is A, B {
function c() public pure returns(string memory) {
return "C";
}
}
在这个例子中,C
合约从 A
和 B
两个合约继承了方法,C
合约中有三个方法 a
、b
和 c
。
可以使用 import
关键字引用其它合约的代码,如下所示:
import "./Base.sol";
contract Derived is Base {
// Derived 合约的代码
}
在这个例子中,Derived
合约引用了 Base.sol
文件中的代码,Base
合约变成了 Derived
合约的父合约。
继承是 Solidity 中实现代码重用的一种重要机制,可以避免重复代码和重复的工作,使合约更加模块化和易于维护。继承的基本语法使用 is
关键字声明继承关系,在子合约中可以覆盖父合约的方法和访问父合约的方法和数据成员。Solidity 支持多重继承,可以从多个合约中获取代码。可以使用 import
关键字引用其它合约的代码。