1. 程式人生 > >solidity智慧合約[36]-連續繼承與多重繼承

solidity智慧合約[36]-連續繼承與多重繼承

連續繼承

合約可以被連續的繼承,在下面的合約中,father繼承了grandfather、son繼承了father。那麼son也同樣繼承了grandfather中的狀態變數和方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
contract grandfather{
   uint public  money=10000;
   function dahan() public pure returns(string){
       return "dahan";
   }

}

contract father is grandfather{

}
contract son is father{

}

連續繼承重名問題

下面的合約中,grandfather合約與 father合約中狀態變數的名字、函式的名字都是相同的,這時,son中的狀態變數money和繼承的函式 以父類father合約中的狀態變數和函式為準。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pragma solidity ^0.4.23;


contract grandfather{
   uint public  money=10000
;

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

contract father is grandfather{
     uint public  money=9999;
    function dahan() public pure returns(string){
       return "alice"
;

   }
}

contract son is father{
 function getMonry() returns(uint){
       return money;
   }
}

多重繼承

合約可以繼承多個合約,也可以被多個合約繼承。如下所示:

1
2
3
4
5
6
7
8
9
10
contract father{
}


contract mother{
}

contract son is father,mother{

}

多重繼承有重名

多重繼承有重名時,繼承的順序時很重要的,以最後繼承的為主。例如下面的例子中,son合約最後繼承了mother,因此以mother合約中的money=8888為準。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
contract father is grandfather{
     uint public  money=9999;

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


contract mother{
   uint public money=8888;
   uint public weight=100;

}

contract son is father,mother{

}

image.png