不同的子类继承一个父类,不仅子类和父类的行为有变异,而且子类彼此的行为也有差异,这就是多态。看程序 E4.5-1.rb ,接着4.3节的代码,添加如下:
ruby 代码
- class Worker < Person
- def talk
- puts "I am a worker. my name is "+@name+", age is "+@age.to_s
- end # talk方法结束
- end # Worker类结束
- p5=Worker.new("kaichuan",30);p5.talk
- p6=Worker.new("Ben");p6.talk
# =>I am a worker. my name is kaichuan, age is 30
I am a worker. my name is Ben, age is 18
Worker类与Student类同样继承自Person类,亲缘关系是兄弟,当他们talk时,能准确表明自己身份,因为他们都重写了各自的talk方法。
Ruby语言,只有重写(override),没有其它语言具有的严格意义上的重载(overload)。Ruby语言有自己的单例方法,还有模块插入(Mix-in),后面会深入探讨Ruby语言的面向对象特征。
完整阅读,请看我写的 Ruby语言中文教程all in one