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