[問題] interface與多重繼承

作者: youneverknow (睡覺一直想)   2014-01-29 21:26:00
請教一個觀念問題,參考的code如:http://ideone.com/HitQVk
當我們使用interface時,
先定義一個interface叫做 "飛行行為",
然後定義兩個class "用翅膀飛" 與 "用火箭飛",
這兩個類別繼承 "飛行行為" 這個interface。
之後我們建立實際的類別 "木頭鴨",
木頭鴨有一個interface屬性 WFB,
而這個WFB是一個 "用火箭飛" class的物件,
所以可以使用 "用火箭飛" class的method void fly(); 。
我的問題是:
c#跟java為什麼要特地弄一個interface出來?
不直接允許class多重繼承其他class就好?
這個設計的用意在哪裡呢?
新手,釐清觀念中,還請指教,
謝謝。
作者: qwer820404 (GB2)   2014-01-29 21:50:00
可能會造成編譯上的錯誤如果 C 同時繼承A跟B,那A跟B又有一樣的方法complier會不知道 到底C要用誰的 造成錯誤所以 現在高階的語言裡幾乎 就我知道都不能多重了只能用介面做到類似的效果 但不完全 因為介面的方法需要使用的類別自己去實現 他只是定義了接口以上是小弟我的理解跟想法 如果有錯請修正我 謝謝
作者: andymai (人生只有一次)   2014-01-29 22:38:00
繼承的藕合性比較高~也就是依賴性比較重~既然舉得出鴨子的例子~那就應該已經看過"深入淺出-設計模式"了?如果光就方法可能重複來說~不管類別還是介面都有可能~會衝就代表要重新思考設計的正確性~如果把程式當成電腦來看~可以想像一塊主機板可因應需求去決定要實作的介面(PCI,PCI-E,SATA,CPU腳位、IDE等等~但是如果是用繼承~因為不能一次繼承兩種以上的類別~所以只能一層層的繼承下去~藕合性高不說~將來發展下去可能亂到不知道這個物件身上的東西到底對不對~需不需要自己覆寫~另外D如果是介面~應該是要實作~而不是繼承..說要"繼承"介面是很奇怪的~就像PCI-E顯卡是實作了PCI-E介面~而不是"繼承"PCI-E介面~因為顯卡需要實作所有介面規格難懂應該是因為經驗不多?說穿了它就是分享設計經驗的書~個人覺得例子都舉得不錯~慢慢看慢慢體會他們想解決什麼問題當然實務上的設計並不會因為看這個就功力大增~除非有非常豐富的開發和領域經驗...
作者: qwer820404 (GB2)   2014-01-30 13:45:00
我會建議在看之前 先看 "設計模式的活用與解晰"
作者: Litfal (Litfal)   2014-02-08 17:10:00
interface叫實作, 不叫繼承。咀嚼一下會覺得蠻有趣的。

Links booklink

Contact Us: admin [ a t ] ucptt.com