条款32 确定你的public继承是is-a关系

问题描述

一个经典的例子:一个rectangle的基类有个通过增加宽度来增加面积的函数makebigger,一个square类public继承rectangle,然而square 通过调用makebigger够长宽会不一致。这明显不是我们想要的。

事实

public继承确定的是一种is-a的继承关系,就是说子类是基类的一个特例,能作用于基类的操作一定可以无歧义的作用于子类,所以在确定派生类型为public时,一定要考虑是不是is-a的关系。一定要想明白,这种is-a的关系并非我们日常生活中猫是动物、老师是人、麻雀是鸟的关系,虽然在很多问题抽象中会有一定的重叠。

结论

public意味着is-a。如果出现问题描述中的情况,那么只能说明问题抽象不对。要按照操作接口上是否同意来抽象归类。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容