Solidity基础(8)--Solidity合约继承

本章节主要介绍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 {}//错误

猜你喜欢

转载自blog.csdn.net/qq_32090861/article/details/80937444