Ruby中

时间:2016-04-12 20:13:08

标签: ruby

我理解Ruby中的对象链图,就像在这个例子中一样:

class C

  def initialize
    @vc = 1
  end

  def a_method
    'C#a_method'
  end
end

class D < C
  def initialize
    @vd = 1
    super
  end

end

obj = D.new

对象obj指向他的单例类#obj(右方向),然后这个单例类#obj指向D,D指向C(向上方向)

我的问题是,是否有一个C类的对象被创建并成为其中的一部分 这个图?

这个对象有什么意义?我能参考一下吗?有一点 引用它,因为我可以访问它的实例变量和 来自obj的实例方法。

超类主要仅用于提供实例方法吗?意思是 我们通常不需要初始化方法和实例变量 在超类?

感谢。

2 个答案:

答案 0 :(得分:0)

我不熟悉编译器如何解释你的例子中的指令,所以我不确定C类的对象是否真的被创建了,尽管我不这么认为。会发生什么是D 类继承了 C类的方法和属性。一个粗略的简化就是说当你引用D类实例的属性或方法时,你实际上是使用D 类C。

继承的使用完全取决于您的用例。在某些情况下,使用超类“initialize方法将是有利的,而在其他情况下则不会。你的用例并不是很清楚,也许如果你告诉我们你想要达到的目的,我可以指出你正确的方向。

答案 1 :(得分:0)

&#34;我的问题是,是否有一个C类的对象被创建并成为该图的一部分?&#34;

是的,Ruby解释的那一刻:

class C
end

它使用object_id和all创建一个对象。

C.object_id  # => 10744340

这个C对象没什么特别的,它只是一个实例:

C.class # => Class

&#34;我可以参考吗?有没有引用它的点,因为我可以从obj访问它的实例变量和实例方法。&#34; 是的,我们刚刚做了两次。