面试题答案
一键面试- 原理说明:
- 在Ruby中,当子类重定义了父类的一个实例方法,并且父类该方法有别名时,子类调用这个别名会调用到父类被别名的方法,而不是子类重定义的方法。这是因为别名是在定义别名时基于当时的方法绑定,别名会一直指向原来定义的方法,不受子类重定义的影响。
- 代码示例:
class Parent
def original_method
puts "This is the original method in Parent"
end
alias alternative_method original_method
end
class Child < Parent
def original_method
puts "This is the overridden method in Child"
end
end
child = Child.new
child.alternative_method
在上述代码中,Child
类继承自Parent
类并重定义了original_method
。Parent
类中有original_method
的别名alternative_method
。当child.alternative_method
被调用时,输出的是This is the original method in Parent
,说明调用的是父类Parent
的original_method
方法,而不是子类Child
重定义的original_method
。