原则32:确定你的public继承塑造出了IS-A关系

这个IS-A是个什么关系?我有点摸不着头脑,书中是“是一种”的意思,但是我还是不明白。

在这里不得不阐述一下类的公有继承的逻辑关系。子类继承父类,子类是父类的一个特化,父类是子类的抽象。任何子类对象都是(IS-A)一个父类对象,反之不然。作者其实是想告诉我们在公有继承中父类所具有的一切行为在子类中也必须具有,惟其如此才能把子类对象称作是一个父类对象。如果你的设计不具有上述目的那你还是不要采用公有继承的好。

为了阐述这一观点,作者举了两个例子,它们分别是企鹅和正方形。

在企鹅的例子中,父类是鸟,子类是企鹅,鸟都会飞,因为企鹅也是鸟所以企鹅也会飞,这显然不合常理,所以这种情况下子类对象就不是一个父类对象,那么表示这种继承关系就不宜采用public继承。

而在正方和矩形的例子中,矩形是父类,正方形是子类,因为正方形的宽和高永远相等,但是在矩形中长是长高是高分得很清楚,你要增加长你就不会顾及到高,这一点正方形做不到,因此你不能说正方形是一个长方形,所以表示这种继承体系你也不能用public继承。

作者在本原则最后总结:不是IS-A的关系你就不要用public继承。

你可能感兴趣的:(原则32:确定你的public继承塑造出了IS-A关系)