Ruby子类存在同名方法时如何调用超类的指定方法
Ruby子类调用父类同名方法(跳过自身重写版本)实现方案
对应需求场景:子类B继承自类A,B重写了method1方法,需要在B的method3方法中直接调用A类定义的method1,不触发B自身重写的同名方法,可通过以下方案实现。

实现代码
通过Ruby原生的未绑定方法绑定能力,直接获取父类A上定义的目标方法,绑定到当前实例上下文执行即可完全跳过子类重写逻辑:
class A def method1 puts "类A定义的method1执行" end end class B < A def method1 puts "类B重写的method1执行" end def method3 # 硬指定调用A类的method1,跳过B类的重写版本 A.instance_method(:method1).bind(self).call end end # 运行验证 b = B.new b.method3 # 输出结果:类A定义的method1执行
补充说明
- 如果场景是子类重写了和父类同名的方法,要在该重写方法内部调用父类版本,直接使用
super关键字即可,无需上述绑定写法,示例:class B < A def method1 super # 自动调用父类A的method1实现 puts "类B重写method1的额外逻辑" end end instance_method绑定写法会直接读取指定类上存储的方法实现,不会走Ruby默认的继承链方法查找逻辑,哪怕继承链路中还有其他类重写了目标方法,也会严格执行你指定的A类的方法版本,完全匹配需求。
内容的提问来源于stack exchange,提问作者sky0215
相关产品推荐
相关产品推荐

