java 板


LINE

補充一些abstract class與interface的東西, 就比較學術上的說法, 這兩種東西其實有點像, 但實際上是差很多的東西, 別人對這兩個東西的定義是這樣的: Interface: An Interface is a special type of class that only provides a specification (not an implementation) for its abstract members. Abstract classes: The main purpose of an abstract class is to define a common interface for its subclasses. Interface的部分Alien大說的我想已經相當明白, 它只負責定義一個規格或功能, 你的 classes可以選擇是否要"支援"這個功能, 支援了之後你可以選擇在你想要使用它的時候 使用它. 但規格制定出來, 要怎麼去實行(implements), 當然得看你選擇去實作的class, 所以 compiler才會強制你要去實作該interface制定的規格(除非你這個實作的class是 abstract的) 舉例來說, 假設我是一個物件, 我實作了兩個介面: 上班族 and 男朋友, 那我在辦公室 的時候, 就是以"上班族"這個介面做操作, 其他同事都是透過"上班族"這個介面與我溝通 , 同樣的, 回到家後, 我便會換上"男朋友"這個介面. 這樣的話, 我就不會在上班的時候 , 不小心被別人invoke到"男朋友"這個介面中的方法, 我在面對閃光時也不會被呼叫到 "上班族"這個介面的方法(成員), 但事實上我是實作這兩個介面. 這與您所提到的"多重 繼承"是有相當大的出入的... 繼承比較多應該是用在Gen-spec(generalization-specialization)的概念上, 如同Alien 大說的, 就是一種"is-a", 或"is-a-kind-of"的概念, 那至於到底是不是繼承abstract classes, 在這概念上則不重要了. 例如: BMWCar繼承Car, ToyotaCar也繼承Car, 則我們可以說, ToyotaCar "is a kind of" Car, 當然, BMWCar "is a kind of" Car, 而在現實世界中, Car可以是一種具體的物件. (誰說Car一定要有品牌= =, 鐵牛車也是Car阿!!!!!) 但假設是: 男人 繼承 人, 女人 繼承 人, 當然我們可以說 男人 is-a-kind-of 人, 但這這個例子 中要注意的是, 既然有定義男人, 女人, 那"人"本身就不可是一個具體的物件, 因為人 不是男就是女(general case), "人"這個東西不該被實體化, 因為這樣會不合理, 所以 在這個地方, 我會建議將"人"這個class設為abstract. 但"人"這個class仍然可以實作 大部分男女人都有的特性, 例如"人"都會有眼睛, 鼻子, 嘴巴等. 那至於什麼時候要用interface, 什麼時候做abstract class呢? 在這之前你可能必須要先回頭來看, Object的原意是什麼, 為什麼程式要OO? An Object is an abstraction of a set of real world things. [Shlaer et al. 1992]. 更精確的說, An object is an entity that has responsibilities. i.e., it is responsible for itself. These responsibilities define the behavior of the object [Shalloway et al. 2005] 所以回歸到源頭, 還是要先得把對物件的觀念釐清, 才能夠設計出適合的抽象化結構. note: 不是把結構弄得越抽像越好, 這樣實作的人也會把code寫得很抽象.... "適當"的抽象化, 就夠了... 獻醜了... ※ 引述《adrianshum (Alien)》之銘言: : 這些很難在三言兩語裡解說得完 : 很多是要你有一定程度和有設計的經驗才能了解. : 只抽取一些明顯的錯誤和基本的概念答一答吧 : ※ 引述《ieping (maggie)》之銘言: : : 我只知道: : : Interface: : : 1.介面 : : 2.須加static : 沒有須加 static 這事. : 你說得太含糊根本不知道你想表達什麼 : : 3.不能實做方法 : : 4.通常用在多重繼承 : interface 和多重繼承有本質上很大的差別. : 只可以說, 多重繼承其中一種常用的狀況, 能以 : interface 達成 : : 5.若類別要做interface要加上implements 介面_名稱 : : Abstract: : : 1.抽象 : : 2.抽想類別 : : 3.抽想方法 : 抽想? : 你上面列這三句也是不知道你想說啥 : : 4.可以實做 : : 問題: : : 1.以上,還有其他的嗎? : 了解他們本質上的分別, 比這些有的沒的比較來得有用 : : 2.我有看人沒有先用extends 類別_名稱 直接 再類別用implements出好多的 介面 : : 是不是這樣也可以?但不太知道代表的意思or概念? : 可以 : : 謝謝高手們~ : 以前看過某人,用了一個例子來說明 base class 和 interface 的分別. : (忘了是誰了, 請諒) : extends 一個 base class, 指的是 'is-a' 的關係 : interface 則是該物支援的介面 : 比如一部電視機, 它 是一個 (is-a) 電器. : 所以很自然, 電器是一個 class, 電視機 extends 電器 : 電視機支援 100v 電源輸入 : 100v 電源輸入是一個介面 (interface), 也很自然, 你可 : 以說 : 電視機 支援 (implements) 100v電源輸入 : 但你不會說 : 電視機 是一個 100v電源輸入 : 能感受到兩者分別, 就是了解 class 和 interface 含義的最初也是最重要一步 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.84.65.145 ※ 編輯: mc18 來自: 219.84.65.145 (05/20 02:31) ※ 編輯: mc18 來自: 219.84.65.145 (05/20 02:34)
1F:推 DavyBlue:好文推 05/20 12:29
2F:推 pauleagle:推這個好的觀念講解 05/20 15:00
3F:推 tangblack:好文 推 06/03 11:22







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燈, 水草

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

TOP