kenlistian

勤学多思

  IT博客 :: 首页 :: 新随笔 ::  :: 聚合  :: 管理 ::
  412 随笔 :: 0 文章 :: 23 评论 :: 0 Trackbacks

  1
 
  2 =begin
  3 -----------------------------------
  4 ruby 类的学习,通过代码学习,是最快,最有效的方法
  5 -----------------------------------
  6 1.基本
  7   测试类中的
  8   initalize
  9   attr, attr_write, attr_read
 10   super
 11   继承类 < 写法
 12   self 的意思,就是指当下类,
 13 
 14   变量@       类实例中的变量,
 15 
 16   类变量@@,   类的私有变量,不可继承。
 17 
 18   类方法,   通c++,就是不需要创建类也可以调用,前面加类名
 19 
 20  2.特殊类
 21    <<  的用法: 主要用于某个类的实例中又想加入点新方法,又不需要改变原有类的结构。但方法过多时,可以归到一个类中。
 22                  当然由特殊方法(Singleton Method)组合来,
 23    class << 某个类实例
 24      def 方法名
 25      end
 26    end
 27 
 28  3public , protect, private
 29    和c++同,如果上面不需在类中特意什么,都是public,
 30    如果要指定,则在方法前加 private or protect
 31    或者
 32    private :methodname1, methodname2 
 33 
 34  4alias 别名,可以为方法定义别名
 35      alias : 别名 :方法名
 36 
 37      ruby最搞怪一点是,你给它起了个别名,如果紧跟着又起个同名的方法,
 38          则别名和同名的方法可以同时存在。
 39          说白了就是,相当于改名了。你说改名了,老名字的方法也一样调用。
 40 
 41 
 42 
 43 =end
 44 class Person
 45   
 46   @@number = 0   
 47 
 48   def initialize(name,gender,age)
 49     @name = name
 50     @gender = gender
 51     @age=age
 52     #@s_variant='ssssssssss'
 53   end
 54   attr_reader:gender      #只读属性
 55   attr  :age, true     #可写属性,false则只读,不定义则私有
 56 
 57   def show(str)
 58     if str ==''
 59        str = 'good'
 60     end
 61     @@number +=1
 62     p @@number
 63     p str
 64   end
 65 
 66   def Person.classMethod()
 67      p "class Method ,It don't need to creat object"
 68   end
 69 
 70 
 71   def lookme()
 72      p "look me"
 73   end
 74 
 75   private :lookme  #:show
 76 
 77   #测试别名
 78   alias :newshow :show
 79 
 80 
 81 
 82 end
 83 
 84 class China_Person< Person
 85    def show(str)
 86       str='I am chinease'
 87       super
 88    end
 89 end
 90 
 91 pp = Person.new("TT",'male', 33)
 92 #p pp.name  
 93 p pp.gender
 94 p pp.age
 95 pp.age=12
 96 p pp.age
 97 
 98 myTest=China_Person.new('AAA','emale',11)
 99 myTest.show('')
100 
101 #------------特殊类
102 JJ = Person.new("JJ"'male', 33)
103 class<<JJ  
104   def show(str)
105      str = "i amn\'t man"
106      super
107   end
108 
109   def show_classvariant
110      @@number +=1
111      p @@number
112   end
113   def new_def
114       p @s_variant
115     p self.class
116   end
117 end
118 
119 JJ.show('')
120 JJ.new_def
121 #JJ.show_classvariant   # 出错,@@number是person中的私有变量,不能继承
122 
123 Person.classMethod
124 
125 #----测试私有变量
126 #pp.lookme()    #  private 
127 
128 #--测试别名
129 pp.show('')
130 pp.newshow('')



posted on 2008-03-21 11:47 kenlistian 阅读(142) 评论(0)  编辑 收藏 引用