类与对象:
Ruby是一种真正的面向对象的程序设计语言, 面向对象是指以对象为中心的理论体系
** 封装 (Encapsulation)
** 继承 ()
** 多态 (Polymorphism)
对比Java & Ruby, 获取一个数字的绝对值。
Java : int num = Math.abs(-99)
PS: 将一个数值传递给Math类的一个静态函数abs处理, 因为在Java中数值是基本类型
而不是类
Ruby : c = -99.abs
PS: 在ruby中,任何事物都是对象, 操作及其结果都是对象
类的定义
class ClassName (类名首字母必写笮措)
def method_name(variables)
#some code
end
end
继承
Ruby 继承的方法很简单, 使用<即可, 并且只支持单继承, 每一个类都只能有一个直接
父类,这样避免了多继承的复杂,但同时它又提供了mixin的机制用来实现多继承,
a)可以使用super关键字来调用父类对象的方法, 当super省略时将使用当前方法的参数来调用
b)如果传入的参数被修改再调用super, 那么将会使用修改后的值
class Base
def meth(info)
puts "This is Base #{info}"
end
end
class Derived < Base
def meth(info)
puts 'This is Derived #{info}'
info = "over"
super
end
end
类变量 : 被一个类的所有实例对象共享, 也可以被类方法访问到。 类变量名以'@@'
开始, 而且必须有初始值,她是私有的, 在类外无法直接访问。
类方法 : 属于一个类的方法, 而且在定义她的时候需要在方法前加上类名
class Person
@@number = 0
def initialize(name, gender, age)
@name = name
@gender = gender
@age = age
@@number += 1
end
def Person.getNumber (类方法)
return @@number
end
end
Ruby的动态性
a)可以重新定义同一个方法
class RedefTest
def meth
puts 'This is meth'
end
end
obj = RedefTest.new
obj.meth
class RedefTest
def meth
puts 'This is new meth'
end
end
obj.meth
Result outcome:
This is meth.
This is new meth.