【Solidity】Is继承
跟大部分是编程语言一样,Solidity也有继承的功能,好处就是同样的功能继承之后就能使用,无需重新封装。在Solidity的继承功能,凡是允许子合约继承能够覆盖的function,在父合约当中都必须加上virtual。
代码范例
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; //A是父合约 contract A { //允许子合约能够override的话,必须加上virtual,否则就无法覆盖 function getName() public pure virtual returns(string memory) { return "A"; } } //B继承了A合约 contract B is A{ function getParentName() public pure returns(string memory){ //获取父合约当中的getName() return super.getName(); } //为了让BC合约能够覆盖,所以这function也必须加上virtual function getName() public pure virtual override returns(string memory){ //覆盖了父合约当中的getName() return "B"; } } //C继承了A合约 contract C is A{ //为了让BC合约能够覆盖,所以这function也必须加上virtual function getName() public pure virtual override returns(string memory){ //覆盖了父合约当中的getName() return "C"; } } //BC同时继承了B和C合约 contract BC is C,B { function get_BC_ParentName() public pure returns(string memory){ //获取父合约当中的getName(), 是获取B合约的,同时继承多个,则拿最后一个继承的合约为主 return super.getName(); } function getName() public pure override(B,C) returns(string memory){ //覆盖了B和C父合约当中的getName() return "BC"; } }
Facebook评论