Solidità - Eredità
L'ereditarietà è un modo per estendere la funzionalità di un contratto. Solidity supporta sia l'ereditarietà singola che multipla. Di seguito sono riportati i punti salienti principali.
Un contratto derivato può accedere a tutti i membri non privati inclusi i metodi interni e le variabili di stato. Ma l'utilizzo di questo non è consentito.
L'override della funzione è consentito purché la firma della funzione rimanga la stessa. In caso di differenza dei parametri di output, la compilazione fallirà.
Possiamo chiamare la funzione di un super contratto usando la parola chiave super o usando il nome del super contratto.
In caso di ereditarietà multipla, la chiamata di funzione utilizzando super dà la preferenza alla maggior parte dei contratti derivati.
Esempio
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(); }
}
Eseguire il programma di cui sopra utilizzando i passaggi forniti nel capitolo Solidity First Application . Esegui vari metodi di contratti. Per E.getComputedResult () seguito da E.getResult () mostra -
Produzione
0: uint256: 8