李深山同学的表述清晰易懂,我再补充一下:
组合和继承都允许在新的类中设置子对象(subobject),组合是直接毫无修饰的说法,而继承则是委婉的说法。
二者间的区别何在,以及怎样在二者之间做出选择。
组合技术通常用于你想要在新类中使用现有类的功能而非它的接口的情形。即,你在新类中嵌入某个对象,借其实现你所需要的功能,但新类的用户看到的只是你为新类所定义的接口,而非嵌入对象的接口。为取得此效果,你需要在新类中嵌入一个private 的现有类的对象。
有时,允许类的用户直接访问新类中的组合成份是极具意义的;也就是说,将成员对象声明为public 。如果成员对象自身都实现了具体实现的隐藏,那么这种做法就是安全的。当用户能够了解到你在组装一组部件时,会使得端口更加易于理解。 |