我理解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
的实例方法。
超类主要仅用于提供实例方法吗?意思是 我们通常不需要初始化方法和实例变量 在超类?
感谢。
答案 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; 是的,我们刚刚做了两次。