中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

solidity智能合約[34]-合約繼承與可見性

發布時間:2020-08-02 00:49:39 來源:網絡 閱讀:285 作者:jonson_jackson 欄目:開發技術

繼承

繼承是面向對象語言的重要特征。繼承是為了模擬現實中的現象,并且可以簡化代碼的書寫。
例如貓與夠都屬于動物。他們都繼承動物的某些特征。

繼承語法

當前合約繼承父類合約的屬性和方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
contract  合約名  is  父類合約名{

}
```                              

## 繼承例子

下面的例子中。直接部署son合約后,son合約繼承了father合約的狀態變量money與函數dahan,所以在son合約中,仍然可以訪問或修改父類的狀態變量和方法。
同時,在son合約中,有屬于自己特有的狀態變量和方法。
```js
pragma solidity ^0.4.23;


contract father{
   uint public money  =10000;
   function dahan() public returns(string){
       return "dahan";
   }
}

contract son is father{
   uint public girlfriend;
   //修改父類屬性
   function change() public{
       money = 99;
   }
}

繼承與可見性

public

狀態變量默認是public的類型,可以被繼承,可以在外部與內部被調用

1
2
3
4
5
6
7
8
9
contract father{
   uint  money  = 10000;
}

contract son is father{
   function getMoney() public view returns(uint){
      return money;
   }
}

函數默認為public屬性,可以被繼承,可以在外部與內部被調用

1
2
3
4
5
6
7
8
9
10
11
contract father{
 function dahan()  pure returns(string){
      return "dahan";
  }
}

contract son is father{
 function test() public view returns(string){
     return dahan();
 }
}

internal

當為狀態變量添加了inernal屬性,仍然可以被繼承,internal屬性只能夠被合約中的方法調用,不能夠在外部被直接調用。

1
2
3
4
5
6
7
8
9
contract father{
   uint internal money  = 10000;
}

contract son is father{
   function getMoney() public view returns(uint){
      return money;
   }
}

當為函數添加了inernal屬性,仍然可以被繼承,internal屬性只能夠被合約中的方法調用,不能夠在外部被直接調用。

1
2
3
4
5
6
7
8
9
10
11
contract father{
 function dahan() internal pure returns(string){
      return "dahan";
  }
}

contract son is father{
 function test() public view returns(string){
     return dahan();
 }
}

external

狀態變量沒有external屬性,但是函數有。
當為函數加上external屬性后,意味著合約只能夠在外部被調用,不能夠在內部被調用。
如果想合約在內部被調用,需要使用到如下this.函數的方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
contract father{

   function dahan() external pure returns(string){
       return "dahan";
   }
}

contract son is father{    
   function test() public view returns(string){
       return this.dahan();
   }

}

能夠調用external的第二種方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
contract father{

   function dahan() external pure returns(string){
       return "dahan";
   }
}
contract testExternal{
  father f = new father();

    function test() public view returns(string){
       return f.dahan();
   }
}
  • 本文鏈接: https://dreamerjonson.com/2018/11/22/solidity-34-inherit/

  • 版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY 4.0 CN協議 許可協議。轉載請注明出處!

solidity智能合約[34]-合約繼承與可見性

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铁力市| 德昌县| 岳阳市| 永胜县| 伊宁县| 丰都县| 老河口市| 福建省| 福鼎市| 长兴县| 彰化市| 漠河县| 余干县| 故城县| 墨玉县| 临泽县| 当阳市| 应用必备| 射洪县| 泗洪县| 中山市| 大同县| 新龙县| 宽城| 井冈山市| 忻州市| 黑河市| 牡丹江市| 通江县| 新源县| 叶城县| 托克逊县| 宁城县| 鄂尔多斯市| 青岛市| 福安市| 宣城市| 应用必备| 怀安县| 娱乐| 十堰市|