Re: [問題] 請問interface到底是做什麼用的?
※ 引述《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
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 24 之 33 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章