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