Solidity-inheritance

提供:Dev Guides
移動先:案内検索

堅牢性-継承

継承は、契約の機能を拡張する方法です。 Solidityは、単一継承と多重継承の両方をサポートします。 主要なハイライトは次のとおりです。

  • 派生コントラクトは、内部メソッドや状態変数を含むすべての非プライベートメンバーにアクセスできます。 ただし、これを使用することはできません。
  • 関数のシグネチャが同じままであれば、関数のオーバーライドが許可されます。 出力パラメーターが異なる場合、コンパイルは失敗します。
  • スーパーキーワードまたはスーパーコントラクト名を使用して、スーパーコントラクトの関数を呼び出すことができます。
  • 多重継承の場合、superを使用した関数呼び出しは、ほとんどの派生コントラクトを優先します。

pragma solidity ^0.5.0;

contract C {
  //private state variable
   uint private data;

  //public state variable
   uint public info;

  //constructor
   constructor() public {
      info = 10;
   }
  //private function
   function increment(uint a) private pure returns(uint) { return a + 1; }

  //public function
   function updateData(uint a) public { data = a; }
   function getData() public view returns(uint) { return data; }
   function compute(uint a, uint b) internal pure returns (uint) { return a + b; }
}
//Derived Contract
contract E is C {
   uint private result;
   C private c;
   constructor() public {
      c = new C();
   }
   function getComputedResult() public {
      result = compute(3, 5);
   }
   function getResult() public view returns(uint) { return result; }
   function getData() public view returns(uint) { return c.info(); }
}

link:/solidity/solidity_first_application [Solidity First Application]の章に記載されている手順を使用して、上記のプログラムを実行します。 契約のさまざまなメソッドを実行します。 E.getComputedResult()の後にE.getResult()が続く場合-

出力

0: uint256: 8