本文主要讲解下Solidity的继承系统,主要内容为 单继承以及 多重继承。如果有其他编程经验的话,便知道继承的主要目的在于优化重复代码,是面向对象编程思想的体现。
原理
solidity通过复制包括多态的代码来支持多重继承,即当一个合约从多个合约继承时,在区块链上只有一个合约被创建,所有基类合约的代码被复制到创建的合约中。
所有的函数调用都是虚拟的,这意味着最远的派生函数会被调用,除非明确给出合约名称。派生的合约需要提供所有父合约需要的所有参数。
单继承
pragma solidity ^0.4.0;
contract Base {
uint _x;
// Base基类构造函数携带参数
function Base(uint x) {
_x = x;
}
}
// 使用 is 从另一个合约派生。派生合约可以访问所有非私有成员,包括内部函数和状态变量,
// 但无法通过 this 来外部访问。
contract Derived is Base(7) {
function Derived(uint y) Base(y * y) {
}
}
派生合约需要提供基类构造函数需要的所有参数,可以采用两种方式来实例化。
1、使用 is Base(7)
携带默认参数方式
2、派生类指定基类构造参数时,在派生类的构造函数定义Bas