📜  红宝石 |方法覆盖(1)

📅  最后修改于: 2023-12-03 15:41:12.930000             🧑  作者: Mango

红宝石 | 方法覆盖

什么是方法覆盖?

方法覆盖(Method Overriding)是指在派生类中重新定义基类中已有的方法的过程。也就是说,子类拥有和父类方法名和参数完全相同的方法,这个方法会覆盖父类中的同名方法,即子类对象调用这个方法的时候,会执行子类中的方法,而不是父类中的方法。这样做的好处是可以扩展或修改父类中的方法,从而实现多态性。

红宝石中的方法覆盖

在红宝石中,方法覆盖非常简单,在定义子类时只需要重新定义与父类同名的方法即可。在子类中调用该方法时,会自动调用子类中的方法,而不是父类中的方法。

class Animal
  def make_sound
    puts "I am an animal"
  end
end

class Cat < Animal
  def make_sound
    puts "Meow"
  end
end

cat = Cat.new
cat.make_sound # 输出 "Meow"
super 关键字

在子类中,我们可以使用 super 关键字调用父类中的同名方法。这一点在方法覆盖中非常重要,因为在某些时候我们需要在子类中扩展或修改父类中的方法,然后再调用父类中的方法,这时可以使用 super 关键字。

class Animal
  def make_sound
    puts "I am an animal"
  end
end

class Cat < Animal
  def make_sound
    super
    puts "Meow"
  end
end

cat = Cat.new
cat.make_sound
# 输出
# I am an animal
# Meow
小结

方法覆盖是一种实现多态性的方式,可以扩展或修改父类中的方法,也可以使用 super 关键字调用父类中的同名方法。在红宝石中,方法覆盖非常简单,只需要重新定义与父类同名的方法即可。