继承
1.普通合约的继承
pragma solidity ^0.4.20;
contract base {
uint internal a;
constructor (uint _a){
}
function privateHello() private{
}
function internalHello() internal {
}
function externalHello() external {
}
function publicHello() public {
}
}
contract Sub is base {
constructor(uint _a) base(_a){
}
function hello() public {
a = 1;
internalHello();
}
}
contract Sub2 is base, Sub { // is后面可以写多个合约,但是先后顺序有讲究的,后面的可以改写前面的,所以要注意顺序
constructor(uint _a) base(_a){
}
function hello() public {
a = 1;
internalHello();
}
}
contract Abstract{
function test() public;
}
2.抽象合约:
2.1合约存在没有函数体(实现)的函数。
2.2合约不能通过编译,只能被继承。
2.3如果派生合约没有实现抽象函数,则该派生合约也将被标记为抽象合约。
普通合约中只要有一个函数没有实现,就是抽象合约
contract Abstract{
function test() public;
}
3.接口interface
3.1要求任何方法都是未实现的
3.2函数不能继承其他合约或接口
3.3不能定义构造器、变量、结构体、枚举
contract Calculator {
function getResult() public view returns(uint);
}
interface ICalculator{
function getResult() public view returns(uint);
}
contract Test is Calculator, ICalculator{
function getResult() public view returns(uint) {
uint a = 1;
uint b = 2;
uint result = a + b;
return result;
}
}