堅牢性-継承

継承は、コントラクトの機能を拡張する方法です。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(); }
}

Solidity First Applicationの章に記載されている手順を使用して、上記のプログラムを実行します。コントラクトのさまざまな方法を実行します。E.getComputedResult()の後にE.getResult()が続く場合、次のようになります。

出力

0: uint256: 8