如果我在Base类函数中更改子类的实例变量会发生什么

时间:2015-04-21 04:19:48

标签: ruby

我想知道我是否编写了基类函数并修改了该函数中的子类实例变量,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类之间的相同公共实例变量。

1 个答案:

答案 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

希望现在更有意义。