继承
pragma solidity>=0.5.0;
contract father{
uint public money = 1000000;
function NB() public returns(string memory){
return "niubi";
}
}
//son这个合约继承了father这个合约
contract son is father{
//继承了父亲的money属性
function getMoney() public view returns(uint){
return money;
}
//继承了父亲的NB()函数
function test() public {
NB();
}
}
连续继承
pragma solidity>=0.5.0;
contract grandfather{
uint public gold = 200;
}
//father合约继承了grandfather合约
contract father is grandfather{
uint public money = 1000000;
function NB() public returns(string memory){
return "niubi";
}
}
contract son is father{
function getMoney() public view returns(uint){
return money;
}
function test() public {
NB();
}
//继承了grandfather的gold
function getGold() public view returns(uint){
return gold;
}
}
遗传特性——继承中的权限
pragma solidity>=0.5.0;
// 如果合约不加任何的修饰符,可以被继承的
contract father{
//加上了public修饰符,仍可以被继承
uint public money = 100000;
//加上了internal修饰符,也可以被继承
uint internal gold = 200;
//编译出错,没有external这个修饰符
uint external money2 = 100;
//不能被继承,只有父类能继承这个属性
uint private money3 = 200;
}
contract son is father{
function getMoney() public view returns (uint){
return money;
}
}
pragma solidity>=0.5.0;
contract father1 {
//public、internal,external(this)都可以继承
function NB() public pure returns(string memory){
return "niubi";
}
}
contract son2 is father1{
function test() public pure returns(string memory) {
return NB();
}
}
函数小结
1. private 不能够被继承、不能够在外部被调用、可以在内部被调用。
2. internal 可以在内部被调用,不能在外部被调用,可以被继承。
3. external 不能够在内部被调用,只能够在外部被调用,可以继承。如果强行调用,通过“地址.”。
4. public 权限最大,可以在外部调用,可以被继承。
5. pure 不会读取全局变量,更不会修改全局变量,一个固定的输入就会有一个固定的输出,不消 耗 gas .
6. constant 在函数中,和 view 相同,在全局变量中,值用于 byte1-byte32 , uint , int , string ,代表数据不能够被修改,在 0.5 版本上已经删除。
7. view 值读取全局变量的值,不修改它。不消耗gas。
8. payable 转账时必须加的关键字。
9. 命名参数 {value:2,name: tong }
10. 函数可以有多个返回值。