美文网首页
ruby中实例变量、类变量、实例方法、类方法区别

ruby中实例变量、类变量、实例方法、类方法区别

作者: D_w | 来源:发表于2021-03-03 17:00 被阅读0次

    实例变量和类变量

    1、实例变量可以理解为类属性,能被类方法访问,不能被实例方法调用不能被继承,子类中赋值不会影响父类。
    2、类变量可以理解为类内的全局变量,可以在类方法和类实例方法中访问,也能被子类继承,并且子类修改之后,父类的值也会更改。

    class Test
      @@class_var = 10
      @class_instance_var  = 1
      #类方法: 两种变量都可以访问
      def self.outclass_var
          p "访问类变量: #{@@class_var}"
      end
      def self.outclass_instance_var
          p "访问实例变量:#{@class_instance_var}"
      end
      #类实例方法: 不能访问类实例变量
      def outclass_var
          p "访问类变量: #{@@class_var}"
      end
      def outclass_instance_var
          p "访问实例变量:#{@class_instance_var}"
      end
    end
    
    #如果两个变量不初始化,这里就打印不出来。不知道是不是版本的问题
    puts Test.class_variables #=>@@class_var
    puts Test.instance_variables #=>@class_instance_var
    
    #类变量,可以被子类共享且修改
    class SubCls < Test
      @@class_var = 12
    end
    
    #可以看到现在类变量值都被修改了
    Test.outclass_var #=>12
    SubCls.outclass_var #=>12
    
    #子类无法继承父类的实例变量
    Test.outclass_instance_var #=>1
    SubCls.outclass_instance_var #=>空
    
    #类实例方法不能访问实例变量
    Test.new.outclass_var #=>12
    Test.new.outclass_instance_var #空
    
    #再看一下子类,和父类的情况相同
    SubCls.new.outclass_var #=>12
    SubCls.new.outclass_instance_var #空
    

    实例方法和类方法

    1、在类方法中不能调用实例方法,只能访问和自己一样的类方法,但实例方法可以访问类方法和实例方法。

    2、在类方法中不能引用[实例变量](用static修饰的变量),但实例方法可以引用成员变量和实例变量。

    3、在类方法中不能使用super、this关键字。

    4、类方法不能被覆盖,但实例方法可以被覆盖。

    5、类方法的调用是:类名.类方法,而实例方法的调用必须new出一个对象,即:对象.实例方法。

    相关文章

      网友评论

          本文标题:ruby中实例变量、类变量、实例方法、类方法区别

          本文链接:https://www.haomeiwen.com/subject/hvaqqltx.html