方法的重写,我们在4.4节和4.5节已经看到了。Worker类与Student类继承自Person类,并且各自重写了Person类的talk方法。
这是在子类和父类之间,如果在同一个类中写两个同名方法呢?看程序 E6.1-3.rb :
# E6.1-3.rb
def talk (a)
puts "This is talk version 1."
end
def talk (a,b=1)
puts "This is talk version 2."
end
talk (2) # This is talk version 2.
talk (2,7) # This is talk version 2.
总是写在后面的方法被执行。
从上面三个小程序可知:在Ruby中,我们说覆写是指重写,我们说重载也是指重写。
Java 和 C++ 是静态语言,程序代码运行中不可以再改变类的属性、方法,为了更好地表现面向对象的多态特征,所以用覆写和重载来加强程序的灵活性,在
开源文档:Ruby 语言入门教程 v1.0
第 64 页
程序运行的时候,动态地选择要使用的方法, 完成后期绑定。而 Ruby 是动态语言,可以随时改变类的属性、方法,所以覆写和重载的重要性就降低了。仔细体会一下,一者是增大可选择性,一者是随时修改。