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