rudy 繼承 概念
更新時(shí)間:2007年11月24日 14:10:10 作者:
在日常生活中,我們對(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ū)ο缶幊痰挠忠缓锰?
類中繼承它們的屬性.如果一切的哺乳動(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ū)ο缶幊痰挠忠缓锰?
相關(guān)文章

簡單對(duì)比分析Ruby on Rails 和 Laravel
web應(yīng)用程序開發(fā)中兩個(gè)相對(duì)而言更加流行的框架是 Ruby on Rails 和 Laravel. 它們兩個(gè)都是非常成熟的項(xiàng)目,已經(jīng)面世相當(dāng)長一段時(shí)間了 .
2014-07-07 
ruby元編程之method_missing的一個(gè)使用細(xì)節(jié)
這篇文章主要介紹了ruby元編程之method_missing的一個(gè)使用細(xì)節(jié),本文介紹在使用method_missing時(shí)造成死循環(huán)的一個(gè)現(xiàn)象,需要的朋友可以參考下
2015-05-05 
ruby寫掃描當(dāng)前網(wǎng)頁所有url的腳本
用ruby寫的掃描當(dāng)前網(wǎng)頁所有url的腳本,對(duì)于學(xué)習(xí)ruby的朋友是個(gè)不錯(cuò)的實(shí)例
2008-06-06