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

2021-05-07 09:55:47 字數 1119 閱讀 2506

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

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

語言:c#

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

習題 168 貓捉老鼠

有乙隻很霸道的貓,捉來好多好多老鼠,然後,這只貓就開始開大餐了。但為了顯得它與眾不同,它用了乙個很特別的就餐順序 它先定好步長k,然後它吃掉第1個位置上的,然後再每隔k只再吃乙隻老鼠 一輪結束後,它再次從第1個位置開始繼續吃,直到最後只剩下乙隻老鼠為止。而這最後乙隻老鼠這只貓會放走,因為它不想破壞生...

貓捉老鼠(python)解析

import turtle 海龜庫 import time import random 定義上下左右按鍵內容,此處b為老鼠 def up b.setheading 90 按x y座標算,轉90 b.forward 30 30個畫素 def down b.setheading 270 b.forwar...

貓捉老鼠問題系列(一)

形象化的數學問題,總是引人入勝,這個世界創意還是很重要的。從網上收集了一些貓和老鼠的數學話題,僅供欣賞之。在數軸上,0的位置停著乙個不動的老鼠,1的位置在初始時刻有乙隻貓。貓是可以走動的,每一步在數軸上分別以二分之一的概率或朝著正方向或朝著負方向走1的距離。當貓到達0的位置時,貓就抓到老鼠了,遊戲結...