4.5 多态

# encoding: utf-8
#E4.4-1.rb ,接着上一节的代码,添加如下:
class Person
def initialize( name, age=18 )
@name = name
@age = age
@motherland = "China"
end #初始化方法结束
def talk
puts "my name is "+@name+", age is "+@age.to_s
if @motherland == "China"
puts "I am a Chinese."
else
puts "I am a foreigner."
end
end # talk方法结束
attr_writer :motherland
end # Person类结束

class Student < Person
def talk
puts "I am a student. my name is "+@name+", age is "+@age.to_s
end # talk方法结束
end # Student类结束

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

p3=Student.new("kaichuan",25); p3.talk
p4=Student.new("Ben"); p4.talk

=begin
I am a student. my name is kaichuan, age is 25
I am a student. my name is Ben, age is 18
请按任意键继续. . .
=end

Worker类与Student类同样继承自Person类,亲缘关系是兄弟,当他们talk时,能准确表明自己身份,因为他们都重写了各自的talk方法。
Ruby语言,只有重写(override),没有其它语言具有的严格意义上的重载(overload)。Ruby语言有自己的单例方法,还有模块插入(Mix-in),后面会深入探讨Ruby语言的面向对象特征。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值