我一直在阅读 Well Grounded Rubyist,它提到了一个类如何继承其超类的实例方法,以便该类的对象能够调用这些实例方法。这是一个例子:
class C
def run_instance_method
puts "This is an instance method."
end
def C.run_class_method
puts "This is a class method."
end
end
class D < C
end
根据我所读到的内容,总是描述类 D 将仅继承类 C 的实例方法(在这种情况下,C::run_class_method 不会被 D 继承)。但是,运行上面的代码后,我注意到:
D.run_class_method # => "This is a class method."
这是我对为什么会发生这种情况的猜测,如果这是正确的理解,请告诉我。如果存在类 D 的实例 d,并且您尝试运行 d.run_instance_method,则该对象将搜索其方法查找路径,并查看该方法是否在其单例类、它自己的类或它的超类中定义。由于 run_instance_method 是在 C 类中定义的,因此不会出现任何问题,并且会调用 run_instance_method。对于类对象 D(它是 C 和 Object 的子类),如果调用 D.run_class_method,它将再次检查 D 类对象的方法查找路径。同样,Ruby 会在类对象 C 中找到它。
这个推理准确吗?