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”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章