子类不可用的类实例变量?

时间:2017-04-28 10:48:08

标签: ruby class-variables class-instance-variables

我想在ruby中利用子类的类方法,但那些依赖于子实例变量的方法不起作用。我被告知“不要使用类变量!(@@)”,所以我不是。如何让课程B做我想做的事,即打印出"1"

class A
  @a = "1"

  def initialize
    self.class.what_is_a
  end

  def self.what_is_a
    p @a
  end
end

class B < A
end


A.what_is_a
B.what_is_a
A.new
B.new

输出:

"1"
nil
"1"
nil

我希望他们都是"1"

1 个答案:

答案 0 :(得分:0)

使用受保护的方法

class A   
  def initialize
    self.class.what_is_a
  end

  def self.what_is_a
    puts a
  end

  protected 

  def self.a
    '1'
  end
end

class B < A
end


A.what_is_a # >> 1
B.what_is_a # >> 1
A.new # >> 1
B.new # >> 1