问题描述
一个经典的例子:一个rectangle的基类有个通过增加宽度来增加面积的函数makebigger,一个square类public继承rectangle,然而square 通过调用makebigger够长宽会不一致。这明显不是我们想要的。
事实
public继承确定的是一种is-a的继承关系,就是说子类是基类的一个特例,能作用于基类的操作一定可以无歧义的作用于子类,所以在确定派生类型为public时,一定要考虑是不是is-a的关系。一定要想明白,这种is-a的关系并非我们日常生活中猫是动物、老师是人、麻雀是鸟的关系,虽然在很多问题抽象中会有一定的重叠。
结论
public意味着is-a。如果出现问题描述中的情况,那么只能说明问题抽象不对。要按照操作接口上是否同意来抽象归类。
网友评论