在日常生活中,我們對(duì)一切對(duì)象的分類都是有一定層次的.我們知道所有的貓都是哺乳動(dòng)物,而所有的哺乳動(dòng)物又都是動(dòng)物.小型的類從更大的
類中繼承它們的屬性.如果一切的哺乳動(dòng)物要呼吸,那么貓也要呼吸.
在Ruby里,我們可以這樣表述這一概念:
ruby>?class?Mammal
????|???def?breathe
????|?????print?"inhale?and?exhale\n"
????|???end
????|?end
???nil
ruby>?class?Cat<Mammal
????|???def?speak
????|?????print?"Meow\n"
????|???end
????|?end
???nil?
雖然我們并未指明一只貓要怎樣呼吸,但因?yàn)镃at是定義為Mammal的子類的(在OO術(shù)語里,較小的類叫子類,相比較大的類稱父類),每一只貓都將繼承來自于Mammal類的行為.因此從程序員的角度出發(fā),貓?zhí)焐蛽碛泻粑@一能力;當(dāng)我們加上speak方法后,我們的貓就能呼吸,也可以發(fā)聲了.
ruby>?tama?=?Cat.new
???#<Cat:0xbd80e8>
ruby>?tama.breathe
inhale?and?exhale
???nil
ruby>?tama.speak
Meow
???nil?
也會(huì)遇到這樣的情況:父類的某些屬性不可以被某一特定的子類繼承.雖然一般鳥類都會(huì)飛,但企鵝是鳥類中不會(huì)飛的一個(gè)子類.
ruby>?class?Bird
????|???def?preen
????|?????print?"I?am?cleaning?my?feathers."
????|???end
????|???def?fly
????|?????print?"I?am?flying."
????|???end
????|?end
???nil
ruby>?class?Penguin<Bird
????|???def?fly
????|?????fail?"Sorry.?I'd?rather?swim."
????|???end
????|?end
???nil?
拋開腦盡力疲地為每一個(gè)新類定義屬性,我們只需要新增或重定義子類和父類之間的區(qū)別.繼承的這一用法有時(shí)也叫做特點(diǎn)編程(differential?programming).這是面向?qū)ο缶幊痰挠忠缓锰?
版權(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ì)盡快更正。
?