创建类
class Song
def initialize(name, artist, duration)#类似成员方法,初始化实例变量
@name=name
@artist=artist
@duration=duration
end
end
继承和消息:
class KaraokeSong < Song
def initialize(name, artist, duration, lyrics) #这个类从Song 继承而来
super(name,artist, duration) #可以用super 来调用父类的成员方法
@lyrics=lyrics
end
end
每个类处理自身实现细节的方法!
对象和属性
attributes!
attr_reader+attr_writer=attr_accessor
使用:
attr_reader :name, :artist, :duration
虚拟属性:
虚拟属性就是通过原来类中的实例属性变换而来的属性
例如:原来歌曲有持续时间,加入原来规定是以s为单位,现在重新定义一个方法,让原来的持续时间从s变成min,这就是虚拟属性的实质
类变量和类方法:
歌曲具体化为每首不同的歌,对于歌曲来说是一个类,对于具体的歌曲来说,就是类对应的实例,实例有实例方法,例如可以对每个具体的歌曲进行播放..操作,对于歌曲这个类,我们有时候也需要进行操作,譬如计算播放了多少歌曲?这里就需要类变量和类方法来实现了。
类变量以@@开头,并且类变量在使用之前必须进行初始化。
class Song
@@play=0
def initialize(name, artist)
@name=name
@artist=artist
@play=0
end
def play
@play+=1
@@play+=1
"this song #@play plays. Total #@@play plays"
end
end
s1=Song.new("song1","artist1")
s2=Song.new("song2","artist2")
puts s1.play
puts s2.play
puts s1.play
puts s1.play