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