[問題] 面試時被問到介面功能

看板java作者 (重出江湖)時間10年前 (2013/10/15 14:18), 編輯推噓6(6030)
留言36則, 13人參與, 最新討論串1/14 (看更多)
今天面試時被面試官問Java為什麼要有介面 有繼承的機制不就夠了嗎? 我的回答是因為為了要解決Java不能多重繼承的問題 避免為了繼承而繼承破壞繼承的結構 也讓不同的類別可以分離出共同的介面 面試官接著問:還有呢? 這…我的功力不夠就答不出來了 所以想請教一下各位 除了上面的答案之外還有什麼更完善的答案呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.28.81

10/15 14:49, , 1F
開 規格書...
10/15 14:49, 1F

10/15 15:20, , 2F
EX:JDBC,Serverlet
10/15 15:20, 2F

10/15 15:25, , 3F
目的在制定規格書後,實作必須強迫依照相同的規格去各自實作
10/15 15:25, 3F

10/15 15:56, , 4F
以上所述是不是套在 abstract class 也通?
10/15 15:56, 4F

10/15 16:04, , 5F
抽象類別,也有這樣子的意味在
10/15 16:04, 5F

10/15 16:15, , 6F
在精神上有繼承與組成的不同。繼承主要看「自己是什
10/15 16:15, 6F

10/15 16:16, , 7F
麼」。父母是什麼,自己就是什麼,而父母有什麼,自己
10/15 16:16, 7F

10/15 16:18, , 8F
理所當然順便有,但不是為了有這些東西而繼承。組成是
10/15 16:18, 8F

10/15 16:19, , 9F
指「由哪些東西組成」,或「要有什麼」,只要是指定要
10/15 16:19, 9F

10/15 16:20, , 10F
有的功能,一個不能少,即使為了有而有。好比音樂播
10/15 16:20, 10F

10/15 16:22, , 11F
放程式,是播放程式,所以繼承播放程式,順便有 play
10/15 16:22, 11F

10/15 16:22, , 12F
借這篇文章想問一下,abstract class跟interface有什麼
10/15 16:22, 12F

10/15 16:23, , 13F
和 stop 的功能,而此音樂播放軟體被指定要有等化器
10/15 16:23, 13F

10/15 16:23, , 14F
不同的地方呢?
10/15 16:23, 14F

10/15 16:25, , 15F
的面板,因此「實現」了一套等化器「介面」。
10/15 16:25, 15F

10/15 16:26, , 16F
看到樓上推文,昨天剛好看到 http://ppt.cc/eYVf
10/15 16:26, 16F

10/16 08:55, , 17F
兩者目的不同吧 可以把介面想成是一個類似合約的東西
10/16 08:55, 17F

10/16 09:47, , 18F
面試研究所的時候也有被問到...
10/16 09:47, 18F

10/16 12:17, , 19F
我總覺得這題會這樣回答的 大概都是C++出身的較多XD
10/16 12:17, 19F

10/16 12:19, , 20F
簡單地說 abstract是extract的意味 interface是contract
10/16 12:19, 20F

10/16 12:21, , 21F
C++正好是少數支援OO語言裡面 沒有真正interface的語言
10/16 12:21, 21F

10/16 14:46, , 22F
可插拔進行JUNIT TEST
10/16 14:46, 22F

10/16 15:25, , 23F
樓上講的 abstract class 也能做到
10/16 15:25, 23F

10/16 16:04, , 24F
面試官這樣問的話這樣回答並沒錯阿,他是問Java為何要有
10/16 16:04, 24F

10/16 16:06, , 25F
白皮書裡面有講,介面的引入就是為了解決單繼承的問題
10/16 16:06, 25F

10/16 16:10, , 26F
精神之類的是為了建構出良好的型別架構才會這樣講的
10/16 16:10, 26F

10/16 16:12, , 27F
但是語言機制本身當初的確是為了單繼承的問題才引入介面
10/16 16:12, 27F

10/16 16:23, , 28F
沒錯,排除多繼承的限制,我跟本想不出需要interface的理
10/16 16:23, 28F

10/16 20:42, , 29F
因為沒介面的話要多重繼承的程式會很難寫 :QQ
10/16 20:42, 29F

10/17 13:18, , 30F
解答: 那麼你覺得呢?
10/17 13:18, 30F

10/17 18:34, , 31F
其實做到與否是一回事 extract&contract概念上有別
10/17 18:34, 31F

10/17 18:35, , 32F
同樣的東西繼承跟包含都能做到 不過兩者意義還是有差
10/17 18:35, 32F

10/18 01:17, , 33F
繼承本身就不是很有彈性,會被parent綁死
10/18 01:17, 33F

10/18 01:26, , 34F
多重繼承會帶出更多的問題,所以單繼承是一個解法而非問題
10/18 01:26, 34F

10/18 01:30, , 35F
而介面是為了補強單繼承這個解法所帶來的問題
10/18 01:30, 35F

10/18 01:37, , 36F
個人覺得Obj-C用 "Protocol" 就比 interface 好得多
10/18 01:37, 36F
文章代碼(AID): #1INDueD9 (java)
討論串 (同標題文章)
文章代碼(AID): #1INDueD9 (java)