Z
ZHANK
编程在线教程Ruby 教程继承与方法查找
面向对象

继承与方法查找

< 继承、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 方法