由貓捉老鼠想起的——關於繼承、介面和引用

用C#寫了幾年的網站,雖然感覺上沒什麼問題了,但是對於基礎知識一直都是模模糊糊的,最近幾天重新學習了一下基礎知識,感受頗深。對於類、封裝、繼承、多態、介面等有了新的認識。

我想說說我的想法,請大家看看對不對。用貓捉老鼠來舉個例子吧。

語言:C#

先來看看貓,貓有爪子、牙齒、鬍鬚等等,這些都是天生的,也可以說是繼承基類得到的。(繼承)

再來看看貓捉老鼠的本領,(介面)

1、不只是貓能捉老鼠,蛇、貓頭鷹等其他動物也可以捉老鼠。

2、貓捉老鼠的功能不是與生俱來的,而是後天學習的,如果不學習的話,那麼貓就失去了捉老鼠的能力,學習不好的話也很難捉到老鼠。

說了這麼多是想說明,捉老鼠的功能可以看作是一個介面,各種動物都可以繼承(當然也可以不繼承),光繼承了還不行,還得去實現。自己去實現,那麼就有不同的形式,也就有好有壞。

最後看看人是怎麼對付老鼠的。(引用)

人呢也可以繼承捉老鼠的介面,拿著板磚拍老鼠。但是人是很懶惰的同時也是很聰明的,於是人發明了老鼠藥、老鼠夾,也可以買一隻會捉老鼠的貓來。

那麼這時 老鼠藥、老鼠夾,會捉老鼠的貓 就是引用,引用一個現成的類來完成捉老鼠的功能。

我覺得介面有兩個主要的功能 —— 規範命名和方便調用

比如可以寫一個捉老鼠的介面,不管是什麼只要有捉老鼠的功能那麼久的繼承捉老鼠的介面,然後去實現這個功能,功能(函數)的名稱是相同的。

那麼在調用捉老鼠的功能(函數)的時候,可以直接使用這個介面,而不用管具體是什麼動物實現了捉老鼠的功能。

如果說介面實現了多繼承,我覺得有點不大對勁。其實類完全可以直接實現多繼承,C++就可以的。不知道是什麼原因C#裡面就給去掉了,弄個介面來代替。但是介面是「只定義不實現」的,是不是有點鬱悶呢。

什麼?您說貓捉老鼠和蛇捉老鼠是不一樣的,這也對,但是我們可以用重寫來實現呀。

其實有的時候使用「引用」的方式可以更好的解決問題。

當然我並不是說介面不好,也不是說不應該使用介面。只是想說不要太死板,靈活一點,該用什麼就用什麼。

還是那句話說得好:不管是黑貓白貓捉到耗子就是好貓!

PS:瞎說了幾句,如有錯誤請大家多多幫助。知道這裡高手很多,請各位高手多多指教!多多感謝!

這裡的帖子對我也有很大的幫助。在此表示感謝!


推薦閱讀:

關於生與死的話題(2)
談詩|辛波斯卡:關於「大問題」的「小回答」
凈空法師關於情愛的開示
關於未成年人刑事責任年齡等熱點問題的專家觀點
《關於史蒂夫的一切》,不得不看的佳片!

TAG:引用 | 關於 | 老鼠 |