MST
星途 面试题库

面试题:Ruby继承中的超类方法重写与调用细节

在Ruby中,子类重写了超类的方法。请阐述如何在子类重写的方法中调用超类的原始方法,并且说明在多重继承(通过模块混入实现类似多重继承效果)场景下,这种调用超类方法的机制会有什么不同,同时给出相应代码示例。
11.4万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
  1. 在单继承场景下调用超类原始方法
    • 在Ruby中,子类重写超类方法后,要调用超类的原始方法,可以使用super关键字。
    • 示例代码如下:
class Animal
  def speak
    puts "I am an animal"
  end
end

class Dog < Animal
  def speak
    super
    puts "I am a dog"
  end
end

dog = Dog.new
dog.speak
  1. 在多重继承(通过模块混入实现类似多重继承效果)场景下
    • 当通过模块混入实现类似多重继承效果时,super会按照方法查找路径调用下一个具有该方法的祖先类或模块中的方法。
    • 方法查找路径遵循C3 线性化算法,它确保了方法查找的一致性和可预测性。
    • 示例代码如下:
module Flyable
  def fly
    puts "I can fly"
  end
end

class Bird
  include Flyable
  def fly
    super
    puts "I am a bird and I can fly"
  end
end

bird = Bird.new
bird.fly

在上述代码中,Bird类混入了Flyable模块,并重写了fly方法。super会调用Flyable模块中的fly方法,然后再执行Bird类中fly方法重写部分的代码。