Solidity - 繼承



繼承是一種擴充套件合約功能的方式。Solidity 支援單繼承和多繼承。以下是關鍵要點。

  • 派生合約可以訪問所有非私有成員,包括內部方法和狀態變數。但不允許使用此功能。

  • 允許函式重寫,前提是函式簽名保持不變。如果輸出引數不同,編譯將失敗。

  • 我們可以使用 super 關鍵字或使用超類名稱來呼叫超類的函式。

  • 在多繼承的情況下,使用 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 第一個應用章節中提供的步驟執行以上程式。執行合約的各種方法。例如,E.getComputedResult() 後跟 E.getResult() 顯示 -

輸出

0: uint256: 8
廣告
© . All rights reserved.