1.快速入门实例:
class Man def initialize(name,age) @name = name @age = age end def sayname puts @name end def sayage puts @age endendm = Man.new("jiqing",22)m.saynamem.sayageb = Man.new("zhangsan",9);b.saynameb.sayage
结果:
jiqing
22zhangsan9说明:
构造函数initialize
普通函数sayname普通函数sayage用def作为函数的开头end作为函数的结尾实例化对象用类名.new()即可2.继承,用>符号来实现继承
案例:
require 'iconv'class Man def initialize(name,age) @name = Iconv.conv('gbk', 'utf-8',name) @age = age end def sayname puts @name end def sayage puts @age endendclass Tianen
结果:
天恩
22我爱妈妈!说明:
love方法是继承来的方法
这里输入中文有乱码,解决方案为引入类“iconv”然后用其中的conv方法进行处理Iconv.conv('gbk', 'utf-8',"我爱妈妈!")最好在ruby中不要出现中文。
3.在子类中增强父类方法
用super方法
案例:
require 'iconv'class Man def initialize(name,age) @name = Iconv.conv('gbk', 'utf-8',name) @age = age end def sayname puts @name end def sayage puts @age endendclass Tianen
结果:
天恩
我爱妈妈!22说明:前两句都是从sayname方法中执行出来的。
4.单态方法,重写类方法
案例:
require 'iconv'class Man def initialize(name,age) @name = Iconv.conv('gbk', 'utf-8',name) @age = age end def sayname puts @name end def sayage puts @age endenda = Man.new("a",6)b = Man.new("b",7)# 单态方法def b.sayname puts "bname"enda.saynamea.sayageb.saynameb.sayage
结果:
a
6bname7说明:
修改之后,b对象吊用的方法输出的内容就变化了。
5.方法访问控制
在Ruby中,只有方法,没有函数,每一个方法都是存在于类中。如果不在任何类中定义方法,
那么这个方法属于哪个类呢?答案:Object类。Ruby将其实现为Object类的私有方法。案例:
def my puts "my love!"endmys = "good"s.my
结果:
my love!
然后报错了。对象s无法访问私有方法。
6.private、public关键字
案例:
class Man def initialize(name,age) @name = name @age = age end private def sayname puts @name end def sayage puts @age end public def free puts "i am public" endendt = Man.new("tianen",22)t.freet.sayaget.sayname
结果:
第一个方法成功输出
第二个、第三个方法有问题
除了在方法之前设置其访问权限之外,还可以在方法定义之后设置
案例如下:
class Man def initialize(name,age) @name = name @age = age end def sayname puts @name end def sayage puts @age end def free puts "i am public" end public :free private :sayname,:sayageendt = Man.new("tianen",22)t.freet.sayaget.sayname
效果同上