本章节主要介绍solidity的单继承及多继承,接口相关内容
1.继承简述
继承通过关键字is来实现,例如:
pragma solidity ^0.4.0;
contract Person{
string name;
uint age;
}
contract man is Person{
}
2.子类访问父类权限问题
pragma solidity ^0.4.0;
contract A{
uint stateVar;
function somePublicFun() public{}
function someInternalFun() internal{}
function somePrivateFun() private{}
}
contract B is A{
function call(){
//访问父类的`public`方法
somePublicFun();
//访问父类的状态变量(状态变量默认是internal权限)
stateVar = 10;
//访问父类的`internal`方法
someInternalFun();
//不能访问`private`
//somePrivateFun();
}
}
3.传参数到父类
子类传参数到父类有两种方式
(1).直接传递
pragma solidity ^0.4.0;
contract Base{
uint a;
function Base(uint _a){
a = _a;
}
}
contract Test is Base(1){
function getBasePara() returns(uint){
return a;
}
}
(2).根据输入值传递
pragma solidity ^0.4.0;
contract Base{
uint a;
function Base(uint _a){
a = _a;
}
}
contract T is Base{
function T(uint _a) Base(_a * _a){}
function getBasePara() returns (uint){
return a;
}
}
4.多继承
pragma solidity ^0.4.0;
contract Test1{
uint public a = 1;
function test1() constant public returns(uint){
return a;
}
}
contract Test2{
uint public a = 2;
function test1() constant public returns(uint){
return a;
}
}
contract Test is Test2,Test1{
function test() constant public returns(uint){
return test1();
}
}
上方案例中Test继承Test1及Test2,那么Test合约中test()方法输出的结果是1,还是2?
答案是1,solidity多继承采用最远继承的原则
注:
1.多继承线性化:
pragma solidity ^0.4.0;
contract X {}
contract A is X {}
contract C is A, X {}//错误