4.5 多态

来源:互联网 发布:mac无法上传图片 编辑:程序博客网 时间:2024/06/06 17:53
# encoding: utf-8#E4.4-1.rb ,接着上一节的代码,添加如下:class Persondef initialize( name, age=18 )@name = name@age = age@motherland = "China"end #初始化方法结束def talkputs "my name is "+@name+", age is "+@age.to_sif @motherland == "China"puts "I am a Chinese."elseputs "I am a foreigner."endend # talk方法结束attr_writer :motherlandend # Person类结束class Student < Persondef talkputs "I am a student. my name is "+@name+", age is "+@age.to_send # talk方法结束end # Student类结束class Worker < Persondef talkputs "I am a worker. my name is "+@name+", age is "+@age.to_send # talk方法结束end # Worker类结束p5=Worker.new("kaichuan",30);p5.talkp6=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 18p3=Student.new("kaichuan",25); p3.talkp4=Student.new("Ben"); p4.talk=beginI am a student. my name is kaichuan, age is 25I am a student. my name is Ben, age is 18请按任意键继续. . .=end
Worker类与Student类同样继承自Person类,亲缘关系是兄弟,当他们talk时,能准确表明自己身份,因为他们都重写了各自的talk方法。Ruby语言,只有重写(override),没有其它语言具有的严格意义上的重载(overload)。Ruby语言有自己的单例方法,还有模块插入(Mix-in),后面会深入探讨Ruby语言的面向对象特征。


原创粉丝点击