继承与方法查找
< 继承、super 调用父类、方法查找链、ancestors、单例类
继承与方法查找
Ruby 单继承但威力十足——super 调用父类,方法查找链清晰可循(include 在子类和父类之间)。
学完本章你将: 掌握 < 继承、super、ancestors 查找链、单例类。
继承
ruby
class Animal
def speak
"动物发出叫声"
end
end
class Dog < Animal # < 继承
def speak
super + ",汪汪!" # 调用父类方法
end
def fetch
"去捡球了"
end
end
dog = Dog.new
puts dog.speak # "动物发出叫声,汪汪!"
方法查找链
ruby
class Dog < Animal
end
puts Dog.ancestors
# [Dog, Animal, Object, Kernel, BasicObject]
# 方法查找顺序:Dog → Animal → Object → Kernel → BasicObject
# include 的模块插在 Dog 和 Animal 之间
super 多种用法
ruby
class Child < Parent
def method(x, y)
super # 自动传递所有参数
super() # 不传任何参数
super(x, y) # 显式传递
end
end
单例类
ruby
# 给单个对象添加方法(不修改类)
dog = Dog.new
def dog.dance
"狗狗在跳舞"
end
puts dog.dance # "狗狗在跳舞"
# 其他 Dog 实例没有 dance 方法