java 板


LINE

※ 引述《kazenol (隨便啦)》之銘言: : 我找了很多資料,大致上了解的是,介面是為了解決單一繼承的問題、或是規範 : 出繼承者必須做出介面預定的規則。 : 繼承我大概了解,子類別繼承之後可以使用父類別的函式與變數。可是繼承介面 : 有什麼好處?如果這個介面規定要做一個jump,但是繼承後jump也不能用,要去 : 寫一個實際jump的方法。那我直接繼承其他類別,也是可以定義jump func,為什 : 麼要繞一圈去繼承一個沒有內容、只寫個名字的類別呢? 因為在物件導向的程式撰寫裡,我們常利用基類別或介面的變數去操作 另一個實際存在的子類別或介面實作者。但是有時候那個基類別其實不 需要做太多事情,也就是說,可能只有很少很少的 public method, 甚至是只有一個,更有甚者,這個實際存在的子類別或介面實作者, 他可能已經繼承自另一個基類別了。這時候如果我們沒有 interface 這個東西的話,就勢必得用多重繼承了。而多重繼承在物件導向中是個 爭議一直很大的東西…。也就是說 Java 利用了 interface 的機制來 解決我們對於多重繼承的需求。 : 我看過一個例子,有個父class很會運動,母class很會唱歌。但是小孩子只能繼承 : 父或母而變得不完美。所以定義一個介面包含會唱歌和會運動的抽象函式,然後由 : 小孩去實作,這樣就算多重繼承。可是第一,父類別的會運動是會講明怎麼個運動 : 法,但是介面的“會運動“,就這三個字而已,沒有說明也沒有方式。第二,這個 : 介面的會運動和會唱歌除了名稱以外,跟這對父母類別有關連嗎?? 而且其他實作 : 這個介面的其他小孩,他們的會唱歌和會運動函式會寫的一樣嗎? 這是個不好的例子…因為看不出來這樣做的用意是什麼。就拿我前幾天 在試的東西舉例好了。假設我們要寫一個泛型排序法,所謂泛型排序法 就是對任何有排序準則的東西做排序。那麼我們該怎麼知道所傳進來的 物件具有比較能力?以下是亂寫的 Java code, 不一定能跑,只是為了 呈現概念。 void sort(Comparable[] input){ if( input[0].compareTo( input[1] ) == 1 ); } 好吧,這完全不能跑 XD 我們沒辦法得知各種物件間需要用什麼方法來比較大小。比方說二個 個人資料,我們應該怎麼去比較他們之間的順序?是看名字呢,還是 看編號?也就是說,我們完全沒有必要去規範 compareTo 應該怎麼 實作。更有甚者,因為 Java 沒有多重繼承,如果你讓你的物件去 繼承了 Comparable, 那你原先物件的繼承體系怎麼辦?重寫?擺爛? 然後你這一段最後一句提到其他小孩的唱歌運動是否會跟原本的一樣。 基本上假使你用到了動態多形機制,意思就是你不要求他們的唱歌運動 是否一樣了。所以這根本不是問題,反而是原則。動態多形就是要每個 不同的物件間行為不同而誕生的。而這個行為雖然各自不同,卻有著相 同的意義。比方說你要所有的小孩表達快樂,那麼有的小孩可能是唱歌, 有的可能是運動(好啦這是很怪啦),不管他用什麼方法表達,你的命令 就只是要求他表達快樂,而這也只是你想要的。反之,就不是動態多形 要做的事,設計方向錯誤。 : 不好意思扯了一堆,因為我一直看不懂介面所以放棄java,沒想到又在php遇上 : ,只好求各位幫我解惑。謝謝! 不懂介面的話會有很多問題喔 @_@ 不過我個人認為多重繼承還是有必要的… Java 的介面並沒有完全解決 問題。至於其他的語言對於多重繼承的解法,就我所知還有 mixin, D 語言和 Ruby 就是以 mixin 來解決的。但不要問我 mixin 是啥, 還沒研究過 XD 順便一提,就我所知有多重繼承的是 C++ 和 Common Lisp, 其他有點忘了 -- Nobody can take anything away from him. Nor can anyone give anything to him. What came from the sea, has returned to the sea. Chrono Cross --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.210.113







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP