Ruby 学习四 (类、对象和变量二 类的继承和属性)

     继续学习,主要学习下面几点:    

     1:继承

     2:属性

 

     在面向对象的世界里,总少不了继承的概念,在上次提到的例子里,我们重写了to_s的属性,既然涉及到重写就说明这个to_s本身就存在这个消息,其实我们新建的任何一个类,如果我们没有明确指定他继承于谁,那么他默认是继承自Object类。在Ruby中Ruby和多数面向对象语言,是只支持继承一个类的,但Ruby通过另外一种方式实现了多重继承的效果,这个暂时不表,因为我也不清楚到底是啥,以后学到了再详述。

    下面我们先看一下Ruby继承的写法。。。   

  1. class KaraokeSong < Song
  2.   def initialize(name , artist , duration , lyrics)
  3.     super(name , artist , duration)
  4.     @lyrics = lyrics
  5.   end
  6.   def to_s #继承并重写属于自己的to_s
  7.     super + " [#@lyrics]"
  8.   end
  9. end

Ruby 用 “<” 来表示继承自xxxx , 而类似于Java的,Ruby也使用super来调用父类的方法。像以上,我们可以看到有两处都用到了super关键字,在to_s中,super没带任何参数表示父类方法中同样名的方法。

 

    在以上讲述了类和他相关的方法后,我们将目光转移到类中的对象,不如实例变量。

    实例变量是类私有的,他不能被外界访问和赋值,就像java或是C#中的private 修饰的字段一样的,在java中我们使用get/set方法来访问,而在C#中提供了属性来提供外界的交互。在Ruby中,也同样可以用类似于java的get/set方法来提供对外界访问的方法,比如:

  1. def name
  2.   @name
  3. end
  4. def artist
  5.   @artist
  6. end
  7. def name = (new_name)
  8.   @name = new_name
  9. end
  10. def artist = (new_artist)
  11.   @artist = new_artist
  12. end

就像以上一样,但这样和普通的方法一样,显示不出来有什么Ruby的简单和高效,Ruby提供了另外两种访问符:【attr_reader , attr_writer】,这两个访问符使得实例变量的对外访问更加的方便快捷,下面我们看看她们的用法:

 

  1. class Song
  2.   attr_reader :name , :artist , :duration
  3.   attr_writer :name , :artist , :duration
  4. end
  5. song = Song.new("You're beautiful" , "James blunt" , 215)
  6. puts song.name #读
  7. song.name = "You're beautiful,it's true" #写
  8. puts song.name 

另外这些除了读属性和写属性外,另外Ruby还有一种叫做虚属性(Virtual Attributes) ,下面我们来看看:

  1. class Song
  2.   def duration_in_minutes
  3.     @duration/60.0 # force floating point
  4.   end
  5.   def duration_in_minutes=(new_duration)
  6.     @duration = (new_duration*60).to_i
  7.   end
  8. end
  9. song = Song.new("Bicylops""Fleck", 260)
  10. song.duration_in_minutes  #4.33333333333333
  11. song.duration_in_minutes = 4.2
  12. song.duration #252

从外面看,似乎和别的属性并没有什么多大的区别。但他在内部使用了计算变量,而不是原来的实例变量,这被称为“统一访问原则”,我们在以后的学习过程中,再继续关注这一“big win”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值