重写方法(Overriding)
有时你可能想要重新定义某个类中已存在的方法。之前我们已经这样做过了,例如,我们创建了一些类它们自己的 to_s
方法来返回字符串的表示。从 Object 向下的每个 Ruby 类都有一个 to_s
方法。Object 类的 to_s
方法返回类名和对象唯一标识符的十六进制表示形式。但是,许多 Ruby 类都有自己特殊的 to_s
版本。例如,Array.to_s 连接并返回数组中的元素值。
当一个类中的方法替换祖先类中的同名方法时,它被称为“重写”(override)该方法。你可以重写标准类库中定义的方法,例如 to_s
,以及你自己的类中定义的方法。如果你需要向现有方法添加一些新的行为,请记住在重写方法的开头使用 super
关键字调用超类的方法。这是一个例子:
override.rb
class MyClass
def sayHello
return "Hello from MyClass"
end
def sayGoodbye
return "Goodbye from MyClass"
end
end
class MyOtherClass < MyClass
def sayHello #overrides (and replaces) MyClass.sayHello
return "Hello from MyOtherClass"
end
# overrides MyClass.sayGoodbye but first calls that method
# with super. So this version "adds to" MyClass.sayGoodbye
def sayGoodbye
return super << " and also from MyOtherClass"
end
# overrides default to_s method
def to_s
return "I am an instance of the #{self.class} class"
end
end