Ruby中的类
时间:2008-12-24 来源:jadehill
类定义:
class Dog ... end |
ruby中,类定义由class ... end包围,任何类调用new方法都可生成该类一个对象。如果没有对生成的对象赋予一个名字,即对于匿名对象,ruby垃圾收集器会认为这是一个可回收对象。
类的继承:
class Mammal ... end
class Cat < Mammal ... end |
在子类中,只需要对与父类不同部分进行添加或重新定义。
方法的重新定义:
class Person def indentify print "i am a person!" end end
class Student < Person def indentify super print "i am a student!" end end |
如果是增强父类的方法而不是完全替代父类同名方法,可以在子类方法中使用super来调用父类中的同名方法。
全局方法:
def fun ... end |
ruby中没有函数只有方法。全局方法是被ruby认为是Object类的方法,由于Object是所有类的父类,因此所有类中均有fun这个方法,但fun在类内的访问权限被限制为private,因此只有类内函数可以访问,外部用户无法访问。
私有函数的定义:
class Test def engine(b) b*2 end private :engine end |
首先定义函数,然后用private将函数符号(":"+函数名)对外部隐藏。
单例方法:
class SingletonTest def size print "25\n" end end
test1 = SingletonTest.new test2 = SingletonTest.new
def test2.size print "10\n" end
test1.size test2.size |
对象的行为是由类决定的,很多时候需要某个对象具有特殊的行为,大部分语言采用的方法是定义另外一个类并只实例化一次,非常麻烦。ruby赋予具体对象改变行为的能力。对于某个对象,可以修改原先类中定义的行为,也可以增加只属于对象自身的行为。