面试题答案
一键面试- 在单继承场景下调用超类原始方法:
- 在Ruby中,子类重写超类方法后,要调用超类的原始方法,可以使用
super
关键字。 - 示例代码如下:
- 在Ruby中,子类重写超类方法后,要调用超类的原始方法,可以使用
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
- 在多重继承(通过模块混入实现类似多重继承效果)场景下:
- 当通过模块混入实现类似多重继承效果时,
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
方法重写部分的代码。