Solidez - Herencia
La herencia es una forma de ampliar la funcionalidad de un contrato. Solidity admite tanto la herencia única como la múltiple. A continuación se muestran los aspectos más destacados.
Un contrato derivado puede acceder a todos los miembros no privados, incluidos los métodos internos y las variables de estado. Pero usar esto no está permitido.
Se permite la sustitución de funciones siempre que la firma de la función siga siendo la misma. En caso de diferencia de parámetros de salida, la compilación fallará.
Podemos llamar a la función de un supercontrato usando una súper palabra clave o usando un nombre de súper contrato.
En caso de herencia múltiple, la llamada de función usando super da preferencia a la mayoría de los contratos derivados.
Ejemplo
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(); }
}
Ejecute el programa anterior siguiendo los pasos proporcionados en el capítulo Primera aplicación de Solidity. Ejecute varios métodos de contratos. Para E.getComputedResult () seguido de E.getResult () muestra -
Salida
0: uint256: 8