1、代码复用有两个方式:继承和复合。
2、继承分为public继承和private继承,public继承是继承接口,也就是父类提供的接口,子类承若仍然提供,内部有可能修改实现,子类与父类是IS-A关系。private继承是继承实现,父类提供的接口,子类不再提供,子类与父类不是IS-A的关系,不满足里氏代换,private表示的意义是,根据某物来实现。
3、复合可以分为关联,聚合,组合。关联是一对一的关系,聚合和组合都是多对一的关系,但二者的紧密程度不一样。举例来说,大雁聚合成雁群,翅膀和脚组合成大雁。复合表示的意义也是,根据某物来实现。更合理的说法应该是,委托某物去做某件事。
4、关联与依赖不同,关联是一个对象持有另一个对象的引用,而依赖则是,别人依赖我,我把自己作为实参传递给别人使用。
5、继承和复合都能实现代码复用,哪一种方式更好?
优先使用复合,除非出现下面的情况:
a、确实是IS-A 的关系;
b、需要访问protected成员;
c、需要重写某个虚方法。