作者SHANGOYANYI (彦一)
看板java
标题Re: [问题] 面试时被问到介面功能
时间Sat Oct 19 02:11:36 2013
※ 引述《yrulee (Face the truth.)》之铭言:
: ※ 引述《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的做法即不难理解。
刚好最近在刻一个新的平台架构
里面的概念 假设用...pizza来举例好了
假设我想写三种口味的pizza的制作书:海鲜、总汇、夏威夷
那这三种pizza应该会有不同的
摆料方式以及
烘烤时间
最後要卖的
价格也会不同
但是不论是哪种pizza 都一样要
准备pizza皮(基底)
我当然可以分别建立三种口味的pizza的制作流程
可是明明作pizza皮的方法都一样
所以 就另外写了一个
pizza皮制作指南
以後不管要做什麽口味的pizza
只要在该口味的制作流程中注明:pizza皮的做法请参考pizza皮制作指南
这部分就搞定了(而且以後要改做法就改一本指南就好了 多方便啊)
接着要写三种口味pizza的制作方法了
因为老板规定只要是pizza制作书就一定要有下面三个章节
所以先把各段的标题名称都先定好了
标题一:摆料方式
标题二:烘烤时间
标题三:价格
这个档案就先叫做
pizza制作书(参考架构)好了
等下写三种口味的制作书就很简单copy一下档案
名称改成类似
pizza制作书(海鲜口味)
然後把三段的内容填一填就搞定了
当然 对於看制作书的读者来说
他只要看到我的制作书有注明:本制作书采用pizza制作书(参考架构)
那他就能预期一定能看到摆料方式、烘烤时间以及价格这三段内容
至於为什麽不把那三段的标题写在pizza皮制作指南里面呢?
因为... 不觉得这样有点奇怪吗? XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.212.25