java 板


LINE

※ 引述《PsMonkey (痞子军团团长)》之铭言: : 从 callee 的角度来看 : 其实这跟 interface 没啥关系,因为如果 : class FooPrinter extends Printer { : public void output(String data) { print(data); } : } : class Printer { : public void output(String data) { print(data); } : } : 也完全符合你的叙述(但也不是说你错) : 也就是说,单纯看 callee : 其实参数到底是用 interface / (abstract) class 宣告都可以 非常同意... 这跟interrface/class无关 只有跟继承有关 : 当然,如果要讨论盖 OO 大楼的时候 : 什麽状况下要用 extend、什麽时候要作 abstract class : 什麽时候该 implement interface 当初设计java 要跟c++最大不同的就是c++可以多重实作继承 但是这个会有很多问题 所以在java改成单一实作继承跟介面多重继承 这也是现在物件导向语言的主流做法 所以 interface跟(abstract)class最大的差异是 interface是可以多重介面继承 但是(abstract)class只能单一实作继承 所以当设计成(abstract) class供别人继承时 那你的孩子应该是个 A (is a) B的概念 如果设计成interface供别人继承时 那应该是A (conforms) B的概念.. 所以abstract class比interface多的地方是可以提供部分实作 这对实作一些例如template method pattern的时候很好用 http://zh.wikipedia.org/wiki/%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95 至於interface比abstract多的地方是可以提供多重继承 所以不会影响别人的继承树 拿来做event listerer就很好用 而有些时候也会有先定义一个Interface A 再去做一个abstract class继承A ex: public abstract class AbstractA implements A{ .... } 例如java.util.List<E>就有java.util.AbstractList<E> 一般的List实作可以选择直接继承AbstractList 这样可以获得AbstractList里面针对List的基本实作 跟一些utility method跟fields 但有些class可能必须继承其他class但是却想conforms List<E> 就可以选择不要extends AbstractList而直接implements List 这样的做法在java standard library很多地方都有.. 好处是可以保留interface的多重界面继承的弹性 跟abstract class提供基本实作的好处 当然在搞懂上面的这些东西之前 你必须先搞清楚为什麽要去有一个最底层的List<E>的需求 那就是为了使用物件导向语言多型(polymorphism)的特性 没有这个需求,那介面就是多余的 XDD --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.163.46.230 ※ 编辑: popcorny 来自: 118.163.46.230 (05/09 09:40) ※ 编辑: popcorny 来自: 118.163.46.230 (05/09 09:43)
1F:→ jej:http://0rz.tw/VVjgL http://0rz.tw/42Y31 可能看一下... 05/09 12:19
2F:推 gn00273680:Push 05/11 22:34
3F:→ adrianshum:一开初的论点出了问题。Java 并不是把 C++改成单一继承 05/12 20:45
4F:→ adrianshum:我没记错的话,虽然syntax 上 Java选择了 C++-like 05/12 20:49
5F:→ adrianshum:但血统上其实是源自 smalltalk 及相关语言(如Obj-C) 05/12 20:53
6F:→ adrianshum:所以Java 并不是把 C++ 改成单继承,而是本身他参照的 05/12 20:54
7F:→ adrianshum:语言就是单继承 05/12 20:54
8F:→ popcorny:喔喔.. 原来是这样 感谢补充 05/12 22:17
9F:推 PsMonkey:印象中还蛮多书 & 蛮多人会这样讲的 XDDDD 05/12 22:18
10F:→ PsMonkey:其实 A 版主不说,我也跟 popcorny 一样 [遮脸] 05/12 22:19
11F:→ Killercat:其实我总认为单继承唯一原因就是Object会造成钻石继承 05/12 22:35







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP