在Java中组合和继承都允许在新的类中放置子对象,组合是显示地这样做,而继承则是隐式的这样做,那么二者 该如何取舍啦?
简单点讲,组合技术通常用想在新类中使用现有类的功能而非它的接口这种情形。即通过在新类中潜入一个对象,让其实现所需要的功能,但新的用户看到的只是为新类所定义的接口,而非所嵌入的对象的接口。所以我们通常在需要的新类中嵌入一个现有类的private对象。
在继承的时候,使用一个现有类,并开发一个它的特殊版本。通常,这意味着你在使用一个通用类,并为了某种特殊需要而将其特殊化。
也可以这样理解,继承和组合都能从现有类型生成新类型。组合一般是将现有类型作为新类型底层实现的一部分来加以复用,而继承复用的是接口。
如果两者放到一起,该如何取舍啦?尽管面向对象编程对继承极力强调,但在开始一个设计时,一般应优先选择使用组合,只在确实必要时才使用继承。因为组合更具有灵活性。