作者yrulee (Face the truth.)
看板java
标题Re: [问题] 面试时被问到介面功能
时间Fri Oct 18 01:55:43 2013
※ 引述《aoksc (重出江湖)》之铭言:
: 今天面试时被面试官问Java为什麽要有介面
: 有继承的机制不就够了吗?
: 我的回答是因为为了要解决Java不能多重继承的问题
: 避免为了继承而继承破坏继承的结构
: 也让不同的类别可以分离出共同的介面
: 面试官接着问:还有呢?
: 这…我的功力不够就答不出来了
: 所以想请教一下各位
: 除了上面的答案之外还有什麽更完善的答案呢?
: 谢谢
继承本身就不是很有弹性,会被parent绑死
多重继承会带出更多的问题,所以单继承是一个解法而非问题
而介面是为了补强单继承这个解法所带来的问题
个人觉得Obj-C用 "Protocol" (协定) 就比 interface 好得多
当一个Obj-C class需要实作 protocol,通常是为了成为delegate (类似java的listener)
而任何有需要callback的时机,会透过此protocol把message send回delegate。
两个class不需要知道彼此的种类,只要有谈好 "协定",就可以互相沟通。
在Obj-C也是单继承且允许多个protocol的情况下,一切都很正常且合理,
我个人认为是原本在语意定义与使用方式上,NextStep有非常完整的思考过。
回到Java,竟然变成需要争论的点...
Java的介面在实务上是用来定义 "与其他物件的互动",
而继承是用来描述此物件是 "属於哪一种种类"
这两者实作起来很类似,但立意是迥异的,且缺一不可,
参考Obj-C的做法即不难理解。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.86.59