You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:01:15