作者cplusplus (C++)
看板java
标题Re: [问题] 请问interface到底是做什麽用的?
时间Sat Apr 15 16:55:09 2006
※ 引述《sandwichC ( )》之铭言:
: ※ 引述《kazenol (随便啦)》之铭言:
: : 我找了很多资料,大致上了解的是,介面是为了解决单一继承的问题、或是规范
: : 出继承者必须做出介面预定的规则。
: 与其说介面是为了解决单一继承的问题,不如说是解决多重继承的混乱
: 如果单一继承有问题存在,java又何必限定单一继承来绑自己的脚呢?
: 事实上 好的架构根本不应该存在多重继承
: 一个东西属於什麽种类就是什麽种类,不该同时属於两个种类的
: 举一个很常见的错误:人是动物,人也是生物
: 所以人应该继承自动物与生物?
: NO!,应该是人继承动物,动物继承生物
对 所以这不是个好例子
不可以举个不恰当例子来否定一件事情吧
当然动物就是生物 没人会同时继承两个的 你所谓不可能同属两类
是说如果 c 是 a 又是 b 那 a 跟 b 一定有 "a 是 b" 或 "b 是 a"的关系
那像是有个 data stream 可读可写 那他是input stream 也是 output stream
请问input跟output谁继承谁? 你举的例子不恰当 不太好立论
其实有很多东西同时是A又是B 但是 A不是B B也不是A
所以这举例没有立足点
: 这是一个很多人可能认为要用多重继承的状况
: 某一类别同时具有多个种类里的功能 (method)
: 写程式的人为了图方便 或者没思考清楚
: 就直接认为要多重继承
: 原文中,父class会运动,母class会唱歌,父母生了个儿子
: 原波之所以认为儿子要继承父母,纯粹是因为儿子要会运动与唱歌
: 儿子是父亲吗? NO!! 儿子是母亲吗? NO!!
不好的例子也不需要讨论了
: java中的interface可以这麽想:
: 明白的标示出 "这是 某一种/某一类 的功能 (method)"
: 但不代表 "可以由此追朔其祖先"
: 一种可能的解法如下 (如有更好的解法 还请赐教)
: interface IGoodAtSports{...}
: interface IGoodAtSinging{...}
: class father implements IGoodAtSports{...}
: class mother implements IGoodAtSinging{...}
: class child implements IGoodAtSports, IGoodAtSinging{...}
: 但若想让father中sports的行为与child中sports的行为一模一样 及
: 让mother中singing的行为与child中singing的行为一模一样
: 除了复制一次 还有什麽解法吗?
: 我很久以前在java还programming版问过
: 但最後似乎就无疾而终了…
: 若有人想到好解法还请不吝赐教
1. 多重继承 JAVA没有 这个例子用也很怪 mother father child @@
2. adapter 但是在java中有点麻烦 例如有1~n种interface各有k种预设行为 可能的
的组合adapter有 k^(2^n -1 ) ...
3. 用template自动做出适合的adapter 有需要才产生 也不用亲自去写adapter class
C++可以达成 JAVA的template我不熟
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.217.14