有一个设计原则说,你应该喜欢组合而不是继承,但当我们想利用多态性时,这不是真的吗?
例如,如果我们想对几个相关的对象做一些事情,我们可能想对一个For each循环进行迭代,只声明执行该方法的对象是一个某种超类型,那么我们如何使用composition来获得该功能和代码重用?
在多态性与继承相关的静态类型语言中,继承可以通过两种方式实现:一种是有状态的,另一种是无状态的。这些可以分别称为实现继承和 规范继承考虑到这一点,当"四人帮"的书中说, 喜欢对象组合而不是类继承。 。。。它们指的是有状态继承。因此,多态性仍然可以通过无状态继承来实现,同时遵循这一原则,即使在静态类型语言中也是如此。 (在动态类型语言中,多态性和继承之间没有关系,因为多态性不需要显式的类型声明。( "四人帮"担心的是这个。 。。。设计人员经常过度使用继承作为一种重用技术,但由于更多地依赖于对象组合,设计往往变得更可重用(更简单(。 我经常用">继承对于代码重用来说是一个糟糕的工具";换句话说,不要使用继承来保持代码的干燥。构图更适合这个。另一方面,无状态继承不是为了代码重用,它是多态性的一个很好的工具。