zoukankan      html  css  js  c++  java
  • ethereum(以太坊)(三)--合约单继承与多继承

    pragma solidity ^0.4.0;
    
    // priveta public internal
    
    contract Test{
        //defualt internal
        uint8 internal _money;
        uint8 _age;
        uint8 private _height;
        uint8 public _sex;
        
        function test() constant returns(uint8){
            return _money;
        }
        
        function testAge() constant returns(uint8){
            return _age;
        }
        
        function testHeight()constant returns(uint8){
            return _height;
        }
        
        function testSex() constant returns(uint8){
            return _sex;
        }
        
        function testSex1() external returns(uint8){
            return 10;
        }
        
        function testAddress1() constant returns(address){
            return msg.sender; //0xca35b7d915458ef540ade6068dfe2f44e8fa733c
        }
    
    }
    
    contract Test1{
        uint _mouth;
        function Test1(){
            _mouth = 11;
        }
        function mouth() returns(uint){
            return _mouth;
        }
    }
    
    contract SubTest is Test,Test1{
        
        function testAddress2()constant returns(address){
            return msg.sender;//0xca35b7d915458ef540ade6068dfe2f44e8fa733c
        }
        function testInternel1()constant returns(uint8){
            return _money;
        }
        function testInternel2()constant returns(uint8){
            return _age;
        }
        /*DeclarationError: Undeclared identifier
        function testPrivate() returns(uint8){ //cannot call Private function/attribute
            return _height;
        }
        */
        function testPublic()constant returns(uint8){
            return _sex;
        }
        function testExternal()constant returns(uint8){
            return this.testSex1();
            //return this.testSex1; TypeError: Return argument type function () external returns (uint8) 
            //is not implicitly convertible to expected type (type of first return variable) uint8
            //return testSex1; DeclarationError: Undeclared identifier
        }
        
        function mouth() returns(uint){
            return 100; //Rewriting the Mouth function in the subcontract overrides the value written by the parent function,only Public function can be overrided
        }
    }
    public
        1.public类型的状态变量和函数的权限最大,可供外部、子合约、合约内部访问。
        2.状态变量声明时,默认为internal类型,只有显示声明为public类型的状态变量才会自动生成一个和状态变量同名的get函数以供外部获取当前状态变量的值。
        函数声明时默认为public类型,和显示声明为public类型的函数一样,都可供外部访问。
    
    internal
        1.internal类型的状态变量可供外部和子合约调用。
        2.子合约中能继承父合约中的所有的public/external类型的函数,不能继承private的函数,也无法调用;internal无法继承,可以调用
    private 1.private私有类型,只能在本合约内部使用,所以在子合约中尝试使用时,就会报错。 
    external
      1.子合约调用父合约中的external函数时,可以用this.
    testSex1()/testSex1()
    重写
        子合约可以将父合约的public类型的函数,只能继承public类型的函数,继承过来的函数进行重写(父函数不是只读属性(constant))
       //https://pan.baidu.com/s/1cRICAY9aSHn6vNI4YN1tQQ
  • 相关阅读:
    其它 Surface 重装系统 win10
    电商 商品数据分析 市场洞察 导出数据后 横线对比 python实现2
    电商 商品数据分析 市场洞察 导出数据后 横线对比 python实现
    电商 商品数据分析 市场洞察 导出数据后 横线对比
    Python excel转换为json
    关于四舍五入
    MBProgressHUD 显示后,为何不能点击屏幕其他地方
    使用容器挂载NFS
    luogu P1128 [HNOI2001]求正整数 dp 高精度
    EC R 86 D Multiple Testcases 构造 贪心 二分
  • 原文地址:https://www.cnblogs.com/eilinge/p/9951888.html
Copyright © 2011-2022 走看看