重写方法(Overriding)

有时你可能想要重新定义某个类中已存在的方法。之前我们已经这样做过了,例如,我们创建了一些类它们自己的 to_s 方法来返回字符串的表示。从 Object 向下的每个 Ruby 类都有一个 to_s 方法。Object 类的 to_s 方法返回类名和对象唯一标识符的十六进制表示形式。但是,许多 Ruby 类都有自己特殊的 to_s 版本。例如,Array.to_s 连接并返回数组中的元素值。

当一个类中的方法替换祖先类中的同名方法时,它被称为“重写”(override)该方法。你可以重写标准类库中定义的方法,例如 to_s,以及你自己的类中定义的方法。如果你需要向现有方法添加一些新的行为,请记住在重写方法的开头使用 super 关键字调用超类的方法。这是一个例子:

override.rb
  1. class MyClass
  2. def sayHello
  3. return "Hello from MyClass"
  4. end
  5. def sayGoodbye
  6. return "Goodbye from MyClass"
  7. end
  8. end
  9. class MyOtherClass < MyClass
  10. def sayHello #overrides (and replaces) MyClass.sayHello
  11. return "Hello from MyOtherClass"
  12. end
  13. # overrides MyClass.sayGoodbye but first calls that method
  14. # with super. So this version "adds to" MyClass.sayGoodbye
  15. def sayGoodbye
  16. return super << " and also from MyOtherClass"
  17. end
  18. # overrides default to_s method
  19. def to_s
  20. return "I am an instance of the #{self.class} class"
  21. end
  22. end