?
?
類(lèi)的定義:?
前面所用到的String、Array、Sprite等都是類(lèi),我們已經(jīng)使用過(guò)系統(tǒng)為它們編好的一些方法了。在?puriset?的腳本中除去最后的?Main腳本全部是類(lèi)定義。
在例如定義?Person?的類(lèi)時(shí)是這樣的:
class?Person?
end
上面定義了一個(gè)什么都沒(méi)有的類(lèi),但這個(gè)類(lèi)卻可以使用,如:
alex?=?Person.new?
也就是說(shuō),我們可以實(shí)例化這個(gè)類(lèi)。
想要繼承也很簡(jiǎn)單,例如:
class?Person?<?Monkey?
end
方法的定義:
和普通函數(shù)的情況相同,如果在類(lèi)的定義當(dāng)中上寫(xiě)?def..end?的內(nèi)容,那么這個(gè)函數(shù)就自動(dòng)成為那個(gè)類(lèi)的方法了:
class?Person?
????def?hello
???????print"?您好?"
????end
end
alex?=?Person.new
alex.hello?#=>?您好
屬性:
以@為開(kāi)頭的變量名,這個(gè)變量自動(dòng)地作為屬性而使用。局部變量只有在?def..end?等結(jié)構(gòu)內(nèi)有效,然而如果能使用屬性的話(huà),只要對(duì)象的實(shí)例存在,則屬性的值總是被保存。
class?Person
def?name
return?@name
end
def?name=(name)
@name?=?name
end
def?hello
print"?我是?"+@?name+""
end
end
alex?=?Person.new
alex.name="?Allex"
alex.hello?#=>?我是?Allex?
在這個(gè)例子中,?@?準(zhǔn)備?name?屬性,而?name()?,?name=()方法分別定義了如何對(duì)@name取值和如何設(shè)置@name的值。
為屬性賦初值:
class?Person
def?initialize
@?name="?無(wú)名先生?"
end
end?
這樣在實(shí)例化對(duì)象的時(shí)候,會(huì)默認(rèn)先調(diào)用initialize方法來(lái)為@name賦初值
如果在?initialize?方法中加入?yún)?shù),?new?會(huì)取那個(gè)參數(shù)。
class?Person
def?initialize(name)
@name?=?name
end
end
alex=?Person.new("?Allex")?
在這個(gè)例子中,?initialize?方法把參數(shù)?name?的取值賦給屬性?@name作為初值。
方法的重載:
在子類(lèi)里,我們可以通過(guò)重載父類(lèi)方法來(lái)改變實(shí)體的行為,如果我們只是想增強(qiáng)父類(lèi)的?identify?方法而不是完全地替代它,就可以用?super。
class?Hahaha
def?laugh(x)
return"?是?"*?x
end
end
class?Wahaha?<?Hahaha
def?laugh(x)
return"?哇?"+?super
end
end
man?=?Wahaha.new
p?man.laugh(4)?#=>"?哇是是是是?"?
super總是返回父類(lèi)返回的值。
版權(quán)聲明:RUBY文檔中心的所有文章標(biāo)明[原創(chuàng)]的均為本站作品,版權(quán)屬RUBY中文化計(jì)劃,若轉(zhuǎn)載請(qǐng)注明;標(biāo)明[翻譯]的其外文版權(quán)歸原作者,譯文版權(quán)屬RUBY中文化計(jì)劃;標(biāo)明[轉(zhuǎn)貼]的,若原作者感到侵犯了他的著作權(quán),那么請(qǐng)及時(shí)跟主持人聯(lián)系,我們會(huì)盡快更正。
?