我想在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"
。
答案 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