Re: [問題] 請問interface到底是做什麼用的?

看板java作者 (C++)時間19年前 (2006/04/15 16:31), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串24/33 (看更多)
※ 引述《sandwichC ( )》之銘言: : ※ 引述《kazenol (隨便啦)》之銘言: : : 我找了很多資料,大致上了解的是,介面是為了解決單一繼承的問題、或是規範 : : 出繼承者必須做出介面預定的規則。 : 與其說介面是為了解決單一繼承的問題,不如說是解決多重繼承的混亂 : 如果單一繼承有問題存在,java又何必限定單一繼承來綁自己的腳呢? : 事實上 好的架構根本不應該存在多重繼承 : 一個東西屬於什麼種類就是什麼種類,不該同時屬於兩個種類的 : 舉一個很常見的錯誤:人是動物,人也是生物 : 所以人應該繼承自動物與生物? : NO!,應該是人繼承動物,動物繼承生物 對 所以這不是個好例子 不可以舉個不恰當例子來否定一件事情吧 當然動物就是生物 沒人會同時繼承兩個的 你所謂不可能同屬兩類 是說如果 c 是 a 又是 b 那 a 跟 b 一定有 "a 是 b" 或 "b 是 a"的關係 那像是有個 data stream 可讀可寫 那他是input stream 也是 output stream 請問input跟output誰繼承誰? 你舉的例子不恰當 不太好立論 其實有很多東西同時是A又是B 但是 A不是B B也不是A 所以這舉例沒有立足點 : 這是一個很多人可能認為要用多重繼承的狀況 : 某一類別同時具有多個種類裡的功能 (method) : 寫程式的人為了圖方便 或者沒思考清楚 : 就直接認為要多重繼承 : 原文中,父class會運動,母class會唱歌,父母生了個兒子 : 原波之所以認為兒子要繼承父母,純粹是因為兒子要會運動與唱歌 : 兒子是父親嗎? NO!! 兒子是母親嗎? NO!! 不好的例子也不需要討論了 : java中的interface可以這麼想: : 明白的標示出 "這是 某一種/某一類 的功能 (method)" : 但不代表 "可以由此追朔其祖先" : 一種可能的解法如下 (如有更好的解法 還請賜教) : interface IGoodAtSports{...} : interface IGoodAtSinging{...} : class father implements IGoodAtSports{...} : class mother implements IGoodAtSinging{...} : class child implements IGoodAtSports, IGoodAtSinging{...} : 但若想讓father中sports的行為與child中sports的行為一模一樣 及 : 讓mother中singing的行為與child中singing的行為一模一樣 : 除了複製一次 還有什麼解法嗎? : 我很久以前在java還programming版問過 : 但最後似乎就無疾而終了… : 若有人想到好解法還請不吝賜教 1. 多重繼承 JAVA沒有 這個例子用也很怪 mother father child @@ 2. adapter 但是在java中有點麻煩 例如有1~n種interface各有k種預設行為 可能的 的組合adapter有 k^(2^n -1 ) ... 3. 用template自動做出適合的adapter 有需要才產生 也不用親自去寫adapter class C++可以達成 JAVA的template我不熟 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.217.14
文章代碼(AID): #14GAzIcI (java)
討論串 (同標題文章)
文章代碼(AID): #14GAzIcI (java)