当前位置:首页 > 开发 > 编程语言 > Ruby > 正文

ruby的OOP学习

发表于: 2010-06-03   作者:酷的飞上天空   来源:转载   浏览:
摘要: ruby的所有类都继承自object,而object又继承自BasicObject(此类为ruby1.9新增) 类的定义 定义类使用关键字class,定义方法使用def, 例子: class MyClass #定义类方法 def self.method1 puts "类方法mothod1" end #另一种方式定义类方法 def

ruby的所有类都继承自object,而object又继承自BasicObject(此类为ruby1.9新增)

类的定义

定义类使用关键字class,定义方法使用def,

例子:

class MyClass
  #定义类方法
  def self.method1
    puts "类方法mothod1"
  end
  #另一种方式定义类方法
  def MyClass.method2
    puts "另一种定义的类方法method2"
  end
  #定义实例方法
  def method3
    puts "实例方法method3"
  end
end
myclass = MyClass.new
MyClass.method1
MyClass.method
myclass.method

  类方法相当于java中的静态方法,无须实例化可直接调用.但不能被实例化后的对象调用

定义属性又4个方法,attr,attr_reader,attr_writer,attr_accessor,他们的作用分别是只读或或可读属性,只读属性,只写属性,可读写属性,他们属于Module类的方法.

例子:

class MyClass
  attr_accessor :attr1
  def attr2
    @attr2
  end

  def set_attr2(value)
    @attr2 = value
  end
end

myclass = MyClass.new
myclass.attr1="attr1"
puts myclass.attr1

myclass.set_attr2("attr2")
puts myclass.attr2

 访问控制

ruby提供三个关键字,public,protected,private.其中ruby默认的级别是public即没有任何限制.

protected级别的方法只能被该类自身和其子类的对象 所调用

private级别的方法只能被self调用,换句话来说就是只能被其自身和子类自身的方法的调用.
例子:

class MyClass
  #默认是public
  def public_method
    puts "public_method"
  end
  #定义protected方法
  protected
  def protected_method
    puts "protected_method"
  end
  #定义private方法
  private
  def private_method
    puts "private_method"
  end
end

class MySubClass<MyClass
  #调用父类中的protected方法
  def call_protected_method
    protected_method
  end
  #调用父类的private方法
  def call_private_method
    private_method
  end
end

my_sub_class = MySubClass.new
my_sub_class.call_protected_method
my_sub_class.call_private_meth

 

类的扩展和继承

通过代码

puts 1.class.name

 可知

1是Fixnum的一个实例,下面就对Fixnum进行扩展

class Fixnum
  def speak
    puts "我的值是#{self}"
  end
  def abs
    puts "abs不能用了"
  end
end
#扩展类方法
def Fixnum.say_hello
  puts "Hello!"
end

1.speak
-1.abs
Fixnum.say_hello

 输出

我的值是1

abs不能用了

Hello!

 

self和super

ruby中的self用来引用自身,和java中的this功能相似.super关键字则用来引用父类的相同方法

例子:

class Person
  attr_accessor :name,:age
  def say_hello
    puts "你好,我是#{self.name}"
  end
  def say_age
    puts "我的年龄是#{self.age}"
  end
end
class Man<Person
  def sex
    "男"
  end
  def say_sex
    puts "我的性别是#{self.sex}"
  end
  def say_hello
    super
    say_age
    say_sex
  end
end
man = Man.new
man.age=20
man.name="jone"
man.say_hello

 输出:

你好,我是jone

我的年龄是20

我的性别是男

 

ruby的构造方法initialize和给对象创建属于对象的方法

class Man
  attr_accessor :myname,:myage
  #类的构造方法
  def initialize(name,age)
    @myname = name
    @myage = age
  end
end
@myname = "test"
@myage = 10
me = Man.new("jack", 30)
#为对象定义方法
def me.about_me
  puts "我叫#{self.myname},年龄是#{self.myage}"
end
me.about_me

 

最后再说下ruby的==和equal?

对于数值形来说这两个貌似没什么区别

对于字符串来说

==比较的是字符串是否相同

equal?比较的是是否是同一个字符此

如:

a="123"

b="123"

a==b 返回true

a.equal? b 返回false

ruby的OOP学习

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
6.4 必修实验3--内核异常分析(3) 接下来的这些信息,和这个模块的调试没多大关系,它们是虚拟内存
内核异常分析(3) 接下来的这些信息,和这个模块的调试没多大关系,它们是虚拟内存页目录、页表信
3 OOP
OOP 目录[隐藏] 一、oop的基本思想 二、OOP技术的历史 三、OOP 的优缺点 四、OOP的未来 五、不同OOP
~_~今天刚刚接触Ruby这门语言。Ruby一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语
我经常被问到这个问题: 我应该从哪儿起步呢?我应该怎么做的?我怎么做才能成为一个更好的Ruby/Rai
我经常被问到这个问题: 我应该从哪儿起步呢?我应该怎么做的?我怎么做才能成为一个更好的Ruby/Rai
原帖地址:http://www.cnblogs.com/PurpleCow/archive/2010/12/31/1923124.html Ruby On Rails 学习
Ruby 学习笔记 参考书--why’s (poignant) guide to ruby 下载地址:CSDN资源 ruby中的数据类型和其
Ruby学习笔记 ruby使用方法 the first half of ruby we are defining, we are creating 例如 blue_c
创建一个rails程序 rails KnoledgeStation cd KnoledgeStation 进入网站文件夹 ruby script/server
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号