我想知道我是否编写了基类函数并修改了该函数中的子类实例变量,ruby如何区分它们?例如:
class Parent
def change_name
@name = 'Parent'
end
end
class Subclass < Parent
def initialize
@name = "subclass"
end
def get_name
@name
end
end
sub_class = Subclass.new
sub_class.change_name
sub_class.get_name #=> Parent
令我困惑的是@name
是Subclass的实例变量,函数change_name
如何改变它就像@name
属于
基类。它是否在ruby中共享Base和Sub类之间的相同公共实例变量。
答案 0 :(得分:2)
在Ruby中,父类和子类没有单独的对象。创建子类的实例时,它也是父类的实例。有一个对象,它同时是两个类。
由于只有一个对象,因此只有一组实例变量。所以实际上,你可以这样想:
class CombinedClass
def initialize
@name = "subclass"
end
def get_name
@name
end
def change_name
@name = 'Parent'
end
end
combined_class = CombinedClass.new
combined_class.change_name
combined_class.get_name #=> Parent
希望现在更有意义。