佩服得说,我从来没有碰过Soap,对COM,Corba只是有些肤浅认识,就在语言方面
做点补充吧。
1. 关于 多重继承 和 接口 。
事实上应该从继承说起,继承意味着子类具有父类所有的成员变量和成员方法,
(从本质而言,父类是作为子类的一个内嵌类存在的),那么多重继承也就意味
着子类具有好几个父类的所有成员变量及成员方法,这本身没有什么玄妙的地方,
但是一旦出现一种“菱形”结构, 即类 d1, d2 继承于类 b, 而类 mi 又多重继
承了类 d1,d2 ,则 mi 类中则会包含有两个 b 类的内嵌类,在做从 mi 到 b
的向上映射时,会出现二义性(C++ 用了一种虚继承的机制来避免这种情况)。
我个人认为很多时候不应该把接口和多重继承放在一起谈,因为接口没有成员
变量,没有实现了的成员方法,它根本没办法作为另一个类的内嵌成员存在。也就
是说没有什么类可以“继承”接口,只有“实现”接口。
写完上面的东西我中午出去溜达了一圈,买了本《COM本质论》(南京的朋友可
以在军人俱乐部内的科海书店用75折买到),先大概看了该书序言,里面一段话于
我心有戚戚,hoho,摘录这段话,希望不会被人告侵权:
“实际上应该存在两种继承性。实现继承(implementation inheritance )表示
真正的实现(即行为)被继承;而接口继承( interface inheritance )则表示
只有行为的规范被继承”
以这个角度来理解的话,Java 和 Delphi 里的接口 还有 C++ 里的纯虚基类
都是提供了接口继承, 但是千万不要以为这是多重继承的替代,我想有必要强调这
一点: 只有在作向上映射时,接口才能发挥作用。
2. 关于 接口 和 设计模式
设计模式中关于接口的最最最最直观运用是 Adapter 即 适配器 模式,而
Adapter 在Observer 模式中也起到了相当重要的应用,强调这两个模式有两个原
因
一, 这两个模式我最常用,也可以说别的模式我用得很少或者根本不会用。
二, 我觉得这两个pattern 适合初学模式的入手,也很容易从中发现pattern
及面向对象的妙处。