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