????????solidity中的繼承(inheritance)胸私,包括簡單繼承酿傍,多重繼承弛秋,以及修飾器(modifier)和構(gòu)造函數(shù)(constructor)的繼承线召。
繼承:繼承是面向?qū)ο缶幊毯苤匾慕M成部分铺韧,可以顯著減少重復(fù)代碼。如果把合約看作是對象的話缓淹,solidity也是面向?qū)ο蟮木幊坦颍仓С掷^承。
規(guī)則:
1讯壶,virtual: 父合約中的函數(shù)料仗,如果希望子合約重寫,需要加上virtual關(guān)鍵字伏蚊。
2立轧,override:子合約重寫了父合約中的函數(shù),需要加上override關(guān)鍵字。
簡單繼承:我們先寫一個簡單的爺爺合約Yeye氛改,里面包含1個Log事件和3個function:?hip(),?pop(),?yeye()帐萎,輸出都是”Yeye”。
我們再定義一個爸爸合約Baba平窘,讓他繼承Yeye合約吓肋,語法就是contract Baba is Yeye,非常直觀瑰艘。在Baba合約里是鬼,我們重寫一下hip()和pop()這兩個函數(shù),加上override關(guān)鍵字紫新,并將他們的輸出改為”Baba”均蜜;并且加一個新的函數(shù)baba,輸出也是”Baba”芒率。
多重繼承:solidity的合約可以繼承多個合約。繼承時要按輩分最高到最低的順序排匪蟀。比如我們寫一個Erzi合約椎麦,繼承Yeye合約和Baba合約,那么就要寫成contract Erzi is Yeye, Baba材彪,而不能寫成contract Erzi is Baba, Yeye观挎,不然就會報錯。 如果某一個函數(shù)在多個繼承的合約里都存在段化,比如例子中的hip()和pop()嘁捷,在子合約里必須重寫,不然會報錯显熏。 重寫在多個父合約中都重名的函數(shù)時雄嚣,override關(guān)鍵字后面要加上所有父合約名字,例如override(Yeye, Baba)佃延。 例子:
修飾器的繼承:Solidity中的修飾器(Modifier)同樣可以繼承,用法與函數(shù)繼承類似尺棋,在相應(yīng)的地方加virtual和override關(guān)鍵字即可封锉。
Identifier合約可以直接在代碼中使用父合約中的exactDividedBy2And3修飾器绵跷,也可以利用override關(guān)鍵字重寫修飾器:
構(gòu)造函數(shù)的繼承:子合約有兩種方法繼承父合約的構(gòu)造函數(shù)。舉個簡單的例子成福,父合約A里面有一個狀態(tài)變量a碾局,并由構(gòu)造函數(shù)的參數(shù)來確定:
我是溫馭臣净当,一個Solidity的開發(fā)學(xué)習(xí)者,以上是我的簡單總結(jié)蕴潦,如果有缺陷像啼,希望在評論區(qū)看到您的補充。