zoukankan      html  css  js  c++  java
  • Ruby类

    类的定义:
    class ClassName
    def method_name(variables)
    #some code
    end
    end

    eg:
    class Person
    def initialize(name, gender, age)
    @name = name
    @gender = gender
    @age = age
    end
    end

    people = new Person.new('Tom', 'male', 15),initialize方法在构造实例时被调用,是一个特殊的方法

    若原有的类已经定义,又有相同的类名进行类定义的话,意味着对原有的类的进行追加;方法重新定义,结果为覆盖

    对象、属性、方法:

      在Ruby中,只有方法可以操作实例变量,Ruby中的封装都是强制性的。在对象外部不可以直接访问,只能通过接口方法访问。

      只读属性:attr_reader 只写属性:attr_writer  即可读又可写:attr_accessor

      attr: name, true 读写

      attr: id, false 只读

      self关键字相当于java中的this

    继承:

      单继承,使用<即可,super关键字调用对象父类的方法,省略参数时,使用当前方法的参数进行调用

    class Base
    	def meth(info)
    		puts "This is Base #{info}"
    	end
    end
    
    class Derived < Base
    	def meth(info)
    		puts "This is Derived #{info}"
    		super
    	end
    end
    
    obj1 = Derived.new
    obj1.meth("test")
    

      

    特殊方法是指某实例特有的方法

    class SingletonTest
    	def info
    		puts "This is a SingleTon test."
    	end
    end
    
    obj1 = SingletonTest.new
    obj2 = SingletonTest.new
    
    def obj2.info
    	puts "This is obj2"
    end
    
    obj1.info
    obj2.info
    

      

    特殊类:

    属于某实例的类。

    class <<obj

    ...

    end

    class SingletonTest
    	def meth1
    		puts "This is meth1"
    	end
    
    	def meth2
    		puts "This is meth2"
    	end
    end
    
    obj1 = SingletonTest.new
    obj2 = SingletonTest.new
    
    class <<obj2
    	def meth1
    		puts "This is obj2.meth1"
    	end
    	def meth2
    		puts "This is obj2.meth2"
    	end
    	def meth3 
    		puts "This is obj2.meth3"
    	end
    end
    
    obj1.meth1
    obj1.meth2
    obj2.meth1
    obj2.meth2
    obj2.meth3
    

      

    类变量: 以@@开头,eg:@@number 使用前必须初始化

    类方法:Classname.classMethod

    存取控制:

    public方法:任何地方都能访问

    protected方法:本类的方法和子类的方法都能访问

    private方法:只能由对象自己访问,这一点和java不同!即在本类的方法中,不能调用本类其他对象的私有方法

    默认都是public方法,除了initialize和initlialize_copy方法,它们永远都是私有方法

     模块中定义的类变量被所有包含该模块的类所共享

    module TestModule

    @@foo = 10

    end

    defined? 用来判断表达式是否有定义,若尚未定义,返回nil;否则,返回一个字符串描述该表达式的种类。

  • 相关阅读:
    POJ 3140 Contestants Division (树dp)
    POJ 3107 Godfather (树重心)
    POJ 1655 Balancing Act (树的重心)
    HDU 3534 Tree (经典树形dp)
    HDU 1561 The more, The Better (树形dp)
    HDU 1011 Starship Troopers (树dp)
    Light oj 1085
    Light oj 1013
    Light oj 1134
    FZU 2224 An exciting GCD problem(GCD种类预处理+树状数组维护)同hdu5869
  • 原文地址:https://www.cnblogs.com/forstudy/p/2546050.html
Copyright © 2011-2022 走看看