MST
星途 面试题库

面试题:Ruby继承机制中的方法查找路径问题

在Ruby中,假设有类A、类B和类C,类B继承自类A,类C继承自类B。每个类都定义了一个同名方法`print_info`。现在创建一个类C的实例并调用`print_info`方法,请详细说明Ruby是如何确定调用哪个`print_info`方法的,即方法查找路径是怎样的?
21.1万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
  1. 方法查找规则基础
    • 在Ruby中,方法查找遵循从对象所属类开始,沿着继承链向上查找的规则。
  2. 具体到本题的查找路径
    • 当创建类C的实例并调用print_info方法时:

      • 首先,Ruby会在类C中查找print_info方法。因为类C是实例所属的类,这是查找的起始点。
      • 如果类C中定义了print_info方法,Ruby就会调用这个方法,查找结束。
      • 如果类C中没有找到print_info方法,Ruby会沿着继承链向上,到类B中查找。因为类C继承自类B。
      • 如果类B中定义了print_info方法,Ruby就会调用这个方法,查找结束。
      • 如果类B中也没有找到print_info方法,Ruby会继续沿着继承链向上,到类A中查找。因为类B继承自类A。
      • 如果类A中定义了print_info方法,Ruby就会调用这个方法。
      • 如果在类A中也没有找到print_info方法,Ruby会抛出NoMethodError异常,表示找不到该方法。
    • 所以,方法查找路径是:类C -> 类B -> 类A。