看板 java 關於我們 聯絡資訊
今天面試時被面試官問Java為什麼要有介面 有繼承的機制不就夠了嗎? 我的回答是因為為了要解決Java不能多重繼承的問題 避免為了繼承而繼承破壞繼承的結構 也讓不同的類別可以分離出共同的介面 面試官接著問:還有呢? 這…我的功力不夠就答不出來了 所以想請教一下各位 除了上面的答案之外還有什麼更完善的答案呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.28.81
ssc24:開 規格書... 10/15 14:49
ssc24:EX:JDBC,Serverlet 10/15 15:20
ssc24:目的在制定規格書後,實作必須強迫依照相同的規格去各自實作 10/15 15:25
sbrhsieh:以上所述是不是套在 abstract class 也通? 10/15 15:56
ssc24:抽象類別,也有這樣子的意味在 10/15 16:04
changyuheng:在精神上有繼承與組成的不同。繼承主要看「自己是什 10/15 16:15
changyuheng:麼」。父母是什麼,自己就是什麼,而父母有什麼,自己 10/15 16:16
changyuheng:理所當然順便有,但不是為了有這些東西而繼承。組成是 10/15 16:18
changyuheng:指「由哪些東西組成」,或「要有什麼」,只要是指定要 10/15 16:19
changyuheng:有的功能,一個不能少,即使為了有而有。好比音樂播 10/15 16:20
changyuheng:放程式,是播放程式,所以繼承播放程式,順便有 play 10/15 16:22
gn00742754:借這篇文章想問一下,abstract class跟interface有什麼 10/15 16:22
changyuheng: 和 stop 的功能,而此音樂播放軟體被指定要有等化器 10/15 16:23
gn00742754:不同的地方呢? 10/15 16:23
changyuheng:的面板,因此「實現」了一套等化器「介面」。 10/15 16:25
aiti80630:看到樓上推文,昨天剛好看到 http://ppt.cc/eYVf 10/15 16:26
jengjye:兩者目的不同吧 可以把介面想成是一個類似合約的東西 10/16 08:55
tomoyaken14:面試研究所的時候也有被問到... 10/16 09:47
Killercat:我總覺得這題會這樣回答的 大概都是C++出身的較多XD 10/16 12:17
Killercat:簡單地說 abstract是extract的意味 interface是contract 10/16 12:19
Killercat:C++正好是少數支援OO語言裡面 沒有真正interface的語言 10/16 12:21
larrycon:可插拔進行JUNIT TEST 10/16 14:46
sbrhsieh:樓上講的 abstract class 也能做到 10/16 15:25
Chikei:面試官這樣問的話這樣回答並沒錯阿,他是問Java為何要有 10/16 16:04
Chikei:白皮書裡面有講,介面的引入就是為了解決單繼承的問題 10/16 16:06
Chikei:精神之類的是為了建構出良好的型別架構才會這樣講的 10/16 16:10
Chikei:但是語言機制本身當初的確是為了單繼承的問題才引入介面 10/16 16:12
sbrhsieh:沒錯,排除多繼承的限制,我跟本想不出需要interface的理 10/16 16:23
Schelfaniel:因為沒介面的話要多重繼承的程式會很難寫 :QQ 10/16 20:42
jej:解答: 那麼你覺得呢? 10/17 13:18
Killercat:其實做到與否是一回事 extract&contract概念上有別 10/17 18:34
Killercat:同樣的東西繼承跟包含都能做到 不過兩者意義還是有差 10/17 18:35
yrulee:繼承本身就不是很有彈性,會被parent綁死 10/18 01:17
yrulee:多重繼承會帶出更多的問題,所以單繼承是一個解法而非問題 10/18 01:26
yrulee:而介面是為了補強單繼承這個解法所帶來的問題 10/18 01:30
yrulee:個人覺得Obj-C用 "Protocol" 就比 interface 好得多 10/18 01:37