Solidity語言學習筆記————35、抽象合約和介面

FLy_鵬程萬里發表於2018-07-08

抽象合約(Abstract Contracts)

合約函式可以缺少實現(請注意,函式宣告頭被;終止),見下面的例子:

pragma solidity ^0.4.0;

contract Feline {
    function utterance() public returns (bytes32);
}

這樣的合約不能被編譯(即使它們同時包含具體函式和抽象函式),但它們可以用作父合約:

pragma solidity ^0.4.0;

contract Feline {
    function utterance() public returns (bytes32);
}

contract Cat is Feline {
    function utterance() public returns (bytes32) { return "miaow"; }
}

如果一個合約是從抽象合約中繼承的,但沒實現所有的函式,則它也是抽象合約。

介面(Interfaces)

介面類似於抽象合約,但它們不能實現任何功能。 還有其他限制:

  • 無法繼承其他合約或介面。
  • 無法定義建構函式。
  • 無法定義變數。
  • 無法定義結構體。
  • 無法定義列舉。

這些限制中的一些可能在未來取消。

介面基本上僅限於合約ABI可以表示的內容,並且ABI和介面之間可以在不丟失任何資訊的情況下轉換。

介面由它們自己的關鍵字表示:

pragma solidity ^0.4.11;

interface Token {
    function transfer(address recipient, uint amount) public;
}

合約可以像繼承合約一樣繼承介面。


相關文章