
接口用来描述层次关系,各个类独立实现。由此也可以看出,虽然C++中的接口是用纯虚类继承实现的,但实际上接口机制和继承机制是两种完全不同的东西。
到现在为止,我们可以得出结论:继承机制实际上很难描述现实概念的层次关系,这是它的局限性。对继承的应用很多情况下并不是为了描述真实概念的层次关系,而只是组织代码的一种形式。比如可以尝试下用继承关系描述一棵进化树,你会发现这个基本上很难。
在C++中引入继承机制的目的是什么,大部分资料对此都语焉不详,但是无论如何至少有一半的目的是为了组织和复用代码,继承扩展是很常用的手法,在MFC、WTL等框架中到处可以看到这样的代码。但是在实际的应用中一定要避免单纯为了复用代码而使用继承机制,典型的案例比如窗口和控件。
窗口和控件是两种完全不同的东西,微软为了复用消息机制把两个概念硬是揉在了一起,所有的控件都从窗口继承下来,这直接导致了GUI框架的高复杂度和难以扩展。
代码复用只是良好设计的副产品而不应该是设计本身的目的。
最后总结一下本文的核心观点:
1. 继承机制有很大的局限性,难于描述现实概念的层次关系;
2. 使用继承时避免生搬硬套现实概念的层次关系;
3. 避免单纯以代码复用为目的使用继承。