MxL*_*evs 4 ruby inheritance class
为什么下面的代码会像我希望的那样运行?我的印象是一个类只能有一个超类,并且在第一次定义类时放置除了原始超类之外的其他东西会引发类型不匹配异常.
class Test
end
class MyTest < Test
def run
p 'my test'
end
end
class MyTest < Object
def run
p 'redefine my test'
end
end
MyTest.new.run
Run Code Online (Sandbox Code Playgroud)
结果
redefine my test
Run Code Online (Sandbox Code Playgroud)
只有继承了第二个类声明,它才适用于我(Ruby 1.9.2和1.9.3)Object.对MI的任何其他尝试都会引发TypeError.
它也不会改变类的继承.所以MyTest.superclass仍然Test即使class MyTest < Object
我认为这是因为Object在superclass定义新类时是默认值.来自文档:
new(super_class=Object) ? a_class
Run Code Online (Sandbox Code Playgroud)
因此,当Object作为被赋予superclass 它在不匹配检查忽略,因为如果它不知道Object是用户输入或默认值.