# 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语言的面向对象特征。