[问题] interface与多重继承

楼主: youneverknow (睡觉一直想)   2014-01-29 21:26:00
请教一个观念问题,参考的code如:http://ideone.com/HitQVk
当我们使用interface时,
先定义一个interface叫做 "飞行行为",
然后定义两个class "用翅膀飞" 与 "用火箭飞",
这两个类别继承 "飞行行为" 这个interface。
之后我们建立实际的类别 "木头鸭",
木头鸭有一个interface属性 WFB,
而这个WFB是一个 "用火箭飞" class的物件,
所以可以使用 "用火箭飞" class的method void fly(); 。
我的问题是:
c#跟java为什么要特地弄一个interface出来?
不直接允许class多重继承其他class就好?
这个设计的用意在哪里呢?
新手,厘清观念中,还请指教,
谢谢。
作者: qwer820404 (GB2)   2014-01-29 21:50:00
可能会造成编译上的错误如果 C 同时继承A跟B,那A跟B又有一样的方法complier会不知道 到底C要用谁的 造成错误所以 现在高阶的语言里几乎 就我知道都不能多重了只能用接口做到类似的效果 但不完全 因为接口的方法需要使用的类别自己去实现 他只是定义了接口以上是小弟我的理解跟想法 如果有错请修正我 谢谢
作者: andymai (人生只有一次)   2014-01-29 22:38:00
继承的藕合性比较高~也就是依赖性比较重~既然举得出鸭子的例子~那就应该已经看过"深入浅出-设计模式"了?如果光就方法可能重复来说~不管类别还是接口都有可能~会冲就代表要重新思考设计的正确性~如果把程式当成电脑来看~可以想像一块主机板可因应需求去决定要实作的接口(PCI,PCI-E,SATA,CPU脚位、IDE等等~但是如果是用继承~因为不能一次继承两种以上的类别~所以只能一层层的继承下去~藕合性高不说~将来发展下去可能乱到不知道这个物件身上的东西到底对不对~需不需要自己覆写~另外D如果是接口~应该是要实作~而不是继承..说要"继承"接口是很奇怪的~就像PCI-E显卡是实作了PCI-E接口~而不是"继承"PCI-E接口~因为显卡需要实作所有接口规格难懂应该是因为经验不多?说穿了它就是分享设计经验的书~个人觉得例子都举得不错~慢慢看慢慢体会他们想解决什么问题当然实务上的设计并不会因为看这个就功力大增~除非有非常丰富的开发和领域经验...
作者: qwer820404 (GB2)   2014-01-30 13:45:00
我会建议在看之前 先看 "设计模式的活用与解晰"
作者: Litfal (Litfal)   2014-02-08 17:10:00
interface叫实作, 不叫继承。咀嚼一下会觉得蛮有趣的。

Links booklink

Contact Us: admin [ a t ] ucptt.com