抽象合約(類似于java的抽象類)
合約的函數(shù)可以缺少一個實現(xiàn)如下面的例子(注意晨汹,函數(shù)聲明報頭由終止;):
pragma solidity ^0.4.14;
contract Feline {
function utterance() returns (bytes32);
}
這樣的合約不能通過編譯,即使合約內(nèi)也包含一些正常的函數(shù)桃漾。但它們可以做為基合約被繼承坏匪。
pragma solidity ^0.4.14;
contract Feline {
function utterance() returns (bytes32);
function getContractName() returns (string){
return "Feline";
}
}
contract Cat is Feline {
function utterance() returns (bytes32) { return "miaow"; }
}
如果一個合約從一個抽象合約里繼承,但卻沒實現(xiàn)所有函數(shù)撬统,那么它也是一個抽象合約适滓。
接口
接口與抽象合約類似,與之不同的是恋追,接口內(nèi)沒有任何函數(shù)是已實現(xiàn)的凭迹,同時還有如下限制:
- 不能繼承其它合約,或接口苦囱。
- 不能定義構(gòu)造器
- 不能定義變量
- 不能定義結(jié)構(gòu)體
- 不能定義枚舉類
其中的一些限制可能在未來放開嗅绸。
接口基本上限制為合約ABI定義可以表示的內(nèi)容,ABI和接口定義之間的轉(zhuǎn)換應該是可能的撕彤,不會有任何信息丟失鱼鸠。
interface Token {
function transfer(address recipient, uint amount);
}
合約可以繼承于接口,因為他們可以繼承于其它的合約羹铅。