2013-03-28 79 views
2

我想創建一個基類來處理所有的方法。在這種情況下,我將如何使用ruby來實現這一點?如何獲得子類變量回到父類ruby

class Dog 
    def initialize 
    @breed = "good breed" 
    end 

    def show_dog 
    puts "#{self.class.first_name} of breed #{@breed}" 
    end 
end 

class Lab < Dog 

    attr_reader :first_name 
    def initialize 
    @first_name = "good dog" 
    end 
end 

lb = Lab.new() 
lb.show_dog 

預期的結果將是「好品種良種狗」 預先感謝您:)

+0

紅寶石你只需要做'first_name'調用FIRST_NAME方法 - 它不像C++在某些情況下,您需要明確要調用哪個first_name實現。 self.class.first_name嘗試調用名爲first_name的類方法。 – 2013-03-28 10:19:44

回答

5
  1. self.class.first_name沒有做什麼,你可能想要做的。您需要直接使用@first_name

  2. 您需要從子類調用父類的構造函數;它不會自動調用。

這工作:

class Dog 
    def initialize 
    @breed = "good breed" 
    end 

    def show_dog 
    puts "#{@first_name} of breed #{@breed}" ### <- Changed 
    end 
end 

class Lab < Dog 

    attr_reader :first_name 
    def initialize 
    super ### <- Added 
    @first_name = "good dog" 
    end 
end 

lb = Lab.new() 
lb.show_dog 
+0

謝謝@Dogbert,正是我在找的東西。 – Quentin 2013-03-28 11:51:33

2

self.class.first_name意味着Lab.first_name,而不是實驗室的實例lb.first_name