作者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