Solidity属性和方法的访问权限

属性默认是internal的类型,外部是不可以访问调用的,如果加上public的话,那么是会自动为这个属性加上一个get的方法的,比如uint   public _age; => function _age() {} 自动生成

方法:默认是public的类型,外部是可以直接访问调用的

public:,不管是属性还是方法都可以通过合约地址的形式来进行访问,this.xxxxx()的形式,public属性:_age(),public方法:tets2()
internal,private:,就不用加this,直接访问,如果是属性的话,就直接属性age就可以了,如果是方法的话,那么就test2()就可以了,不用加this,指针的形式来访问(合约地址的形式)

pragma  solidity  ^0.4.4;

  //internal默认是合约内部的访问权限
  //internl和private外部都是不能访问的
  uint  _age;//现在外部是访问这个_age的,默认的是internal,内部访问
  uint  public _weight;//这个会自动生成一个get函数,public,可以被调用,在页面可以看到_weight方法(实际上是一个get方法)

// public,当属性的类型是public的时候,会生成一个和属性名相同的并且返回值就是当前属性的get函数

  //下面的方法把上面public自动生成的get函数给覆盖掉了
  function   _weight()  constant returns(uint){
      return   111;//返回的是状态变量,调用_weight返回的是111
  }
}
//如果想用合约的指针去访问的话,只能是public的类型
pragma   solidity  ^0.4.13;

contract  Person {

  uint  _age;//默认是internal的类型
  uint  public _weight;//会自动生成一个_weight的get函数
  uint  private _money;
  function test() constant  public  returns (uint) {

    return  _age;
  }

  function  test2()  constant  internal  returns(uint){
    return   _age;
  }
  function   get()   contract  returns(uint) {
    this._weight();//_weight会自动生成一个_weight的get函数,所以是可以通过this来进行访问的,但是_money是private的类型,所以是不能通过这个this指针的形式来进行访问的,否则会报错
    return  this.test();//因为test方法是public的类型,所以是可以访问调用的
    //this就是当前的合约地址,如果是internal的类型的话,不能通过this来进行访问
    //如果要访问internal的方法类型的时候,直接把this去掉,就是test()()
  }

  function  get2()   constant  returns(uint){
    return   test2();//tets2是internal的方法类型,所以是不用加上this直接进行访问的
    //注明:如果是intrnal,private的类型的时候,是不可以通过指针进行访问的,在合约内部访问都会报错,加指针的话
  }
}

属性默认是internal的类型,是不会自动生成属性的get函数的,如果是public的话,那么会自动生成这个属性的get函数,可以被调用

方法默认是public的类型

如果内部访问public的类型,不管是方法还是属性的话,可以通过this.xx(),的形式(合约地址的形式)来访问,如果是internal,private是不可以通过这种方式来访问的,直接属性,或者方法()就可以访问

原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10663963.html

时间: 2024-11-02 19:55:28

Solidity属性和方法的访问权限的相关文章

Objective-C 类属性和方法的访问权限

OC中提供了4种访问权限,@private, @public, @protected这三种和其他的C++, Java是一样的,@package这个访问权限并不是Java里的包访问权限,OC中没有包的概念,这个是框架级的访问权限,在当前的framework的类中视为@protected,在框架以外的类中访问被视为@private. // // Goods.h // 05_Self // // Created by apple on 14-11-10. // Copyright (c) 2014年

Java基础知识强化17:JAVA不可以将所覆盖的方法的访问权限变得比父类的小

首先我们看一下下面的代码如下: 1 interface I { void go(); } 2 abstract class A implements I { } 3 4 class C extends A { 5 void go(){ System.out.println("I love you!"); } 6 } 在线编译出现如下报错: 分析: 出现这个错误的原因是: 接口的方法默认修饰符是:public abstract 这里实现的go( )方法的修饰符是default,访问权限降

override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值不同的方法名。 3、存在于父类和子

override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载,过载) 1.参数类型.个数.顺序至少有一个不相同.   2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中. 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现. 重写(O

Swift 中 Selector 方法的访问权限控制问题

今天用Swift写了个视图,在视图上加个手势,如下所示: 1 2 panGestureRecognizer = UIPanGestureRecognizer(target: self, action: "beginDragged:") addGestureRecognizer(panGestureRecognizer) 运行了下程序,然后崩溃了.崩溃日志如下: 1 [**.SwipeCardView beginDragged:]: unrecognized selector sent 

证明接口interface中定义的方法的访问权限为public

如题,证明Java中接口文件中定义的方法访问权限为public. 众所周知,接口中的方法默认是public abstract 类型的,它必须由子类实现之.那怎么证明呢,反射. 定义接口文件 package com.zhangqi.jvm; import java.util.Date; public interface ITest { double PI = 3.14; Date CREATE_TIME = new Date(); void play(); String getName(); }

成员变量及方法的访问权限

访问权限    同一个类    同一包中    不同包的子类    不同包非子类Private         可以            Default        可以        可以        Protected    可以        可以          可以    Public         可以        可以          可以                可以

【速记速学】Python类的定义,属性,方法,访问性!

前言: Python 随着人工智能,机器学习,深度学习,AI 的发展,迅速成为宠儿. 今天,花 5 分钟时间,解读下Python中的类,定义,使用等. 如何定义自己的类呢? 01 类(对象) class dog(object)以上定义了一个dog对象,它继承于根类object. 02 类的属性 def init(self, name, dtype):self.name = nameself.dtype = dtype以上定义了dog对象的两个属性:name, dtype,通过init,这个系统函

python3 类的属性、方法、封装、继承及小实例

Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. python类与c++类相似,提供了类的封装,继承.多继承,构造函数.析构函数. 在python3中,所有类最顶层父类都是object类,与java类似,如果定义类的时候没有写出父类,则object类就是其直接父类. 类定义 类定义语法格式如下: class ClassName:    <statem

【java】Java的继承,方法重写,访问权限

继承 **首先面向对象的三大特性: 1. 封装 2. 继承 3. 多态** 语法 class Subclass extends Superclass{ } 作用 继承的出现提高了代码的复用性. 继承的出现让类与类之间产生了关系,提供了多态的前提. 不要仅为了获取其他类中某个功能而去继承 例子 class Person { String name; int age; } /*继承与Person类*/ class Student extends Person { int weight; } Stud