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 3. public , protect, private
29 和c++同,如果上面不需在类中特意什么,都是public,
30 如果要指定,则在方法前加 private or protect
31 或者
32 private :methodname1, methodname2
33
34 4. alias 别名,可以为方法定义别名
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('')