從乙個例子說為什麼要用介面

2021-08-23 14:32:17 字數 928 閱讀 8218

如題,看看下面這個例子   :

現有狗 和企鵝兩個類  ,狗會玩飛碟,企鵝會游泳,為什麼要把玩飛碟和游泳的方法分別定義在兩個介面裡?如果

定義在介面反而顯得**更加累贅,因為還多了兩個介面。你可能會想,幹嘛不直接把玩飛碟的方法直接定義在狗類中,游泳

的方法直接定義在企鵝類中(這種情況下沒有父類)。

假設這樣一種情況:後面又多了一種寵物型別鴨子,鴨子也會游泳,你是不是又要在鴨子類中定義乙個游泳的方法?在這裡考

慮一下這個問題:企鵝會游泳,鴨子會游泳,具有共同的特性,既然有共同的特性,為什麼不去抽取?抽取出乙個父類。對,沒

錯,你可能會抽取出乙個父類a,這個父類中有乙個游泳的方法,然後鴨子類和企鵝類都繼承這個父類。(看起來毫無問題)

。接著繼續:後面我們又發現,鴨子會唱歌了(呱呱呱),你又養了一種新的寵物鸚鵡,而且鸚鵡也會唱歌(嚶嚶嚶),到這裡,

你又發現鴨子和鸚鵡具有共同的特性(唱歌),那就得繼續向上抽取,在這個你會想,能不能把唱歌這個方法定義在剛才的a

類中,仔細想想,這樣行不通(如果是把唱歌這個方法定義在a類中,剛才企鵝也繼承了a類,那不就企鵝也會唱歌了【顯然不合理

】),那就換種方式試試:把唱歌這個方法定義在另乙個類中(b),然後鸚鵡類繼承b類,鴨子類也繼承b類(好,這裡就出現問

題了:鴨子已經繼承了a類了,不能再繼承b類了,因為類只能單繼承,又出現問題了。在這裡聯想一下,什麼可以多繼承【實

現】,當然是介面了),經過上面的思考,最終決定:把唱歌,游泳,這些方法分別定義在不同的介面裡,然後鴨子類去實現

有唱歌方法的介面,同時也去實現具有游泳方法的介面    ,鸚鵡類去實現有唱歌方法的介面,這樣鴨子既會游泳也會唱歌,鸚

鵡也會唱歌,狗會玩飛碟,企鵝會游泳,在這裡介面的好處就體現出來了,更加的靈活,方便程式的拓展。在這個例子中,接

口體現的是一種能力(類實現了某個介面,這個類就具備了該介面的方法【功能】)

什麼是資料 資訊和知識?從乙個例子說起

從乙個例子說起 資料 37.5 通過這個你能看出什麼嗎?估計很難?資訊 這個時候,這個37.5有意義了,是乙個廣州的1歲半的小女孩在夏天午後玩了後測試的體溫。在這樣的背景下,37.5成為了有意義的資訊中的乙個關鍵指標。知識 奶奶問了,孩子是不是發燒,該去醫院?媽媽也手足無措!這個時候該知識出場了。知...

Express高階 從乙個例子看路由分組機制

路由是express的核心功能。本文通過乙個簡單例子,介紹express的路由分組機制,以及next route 的正確使用方法。使用過express的同學都知道,通過next 將 執行權轉移到下乙個中介軟體 例子略 在官網有下面例子,出現了next route 的呼叫 a middleware s...

從乙個例子講解拷貝建構函式與return

1 include iostream 2 using namespace std 34 5class location 613 location const location p 複製建構函式 1417 location 1821 int getx int gety 22private int x,...