这道鸵鸟的题,你能答对吗?
关于子类型的描述中,( )是错误的? A: 在公有继承下,派生类是基类的子类型 B: 子类型关系是不可逆的 C: 子类型就是指派生类是基类的子类型 D: 一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型
如果鸟是可以飞的,那么驼鸟是鸟么?驼鸟如何继承鸟类?
答案:
鸟是可以飞的。 也就是说,当鸟飞行时,它的高度是大于0的。 驼鸟是鸟类(生物学上)的一种, 但它的飞行高度为0(驼鸟不能飞)。
不要把可替代性和子集相混淆。 即使驼鸟集是鸟集的一个子集(每个驼鸟集都在鸟集内),但并不意味着鸵鸟的行为能够代替鸟的行为。 可替代性与行为有关,与子集没有关系。 当评价一个潜在的继承关系时,重要的因素是可替代的行为,而不是子集。
如果一定要让驼鸟来继承鸟类, 可以采取组合的办法, 把鸟类中的可以被驼鸟继承的函数挑选出来,这样驼鸟就不是"a kind of"鸟了,而是"has some kind of"鸟的属性而已。 class bird { public: void eat(); void sleep(); void fly(); }; class ostrich { public: void eat(); void sleep(); };
那么,你知道上面的答案为什么是C了吗?
留言告诉我吧~