32确定你的public继承塑模出is-a关系:
什么是is-a关系?
比如说两个类A和B,假如B公开继承自A,那么就意味着:B一定属于类A,但是A却不一定属于B。一个简单的例子,假如A是塑模的是人,而B塑模的是学生。那么一般来讲:学生一定属于人,人却不一定属于学生。
编程时,is-a关系可能是违背由现实生活得来的经验直觉的:
例如现实生活中的经验:企鹅是一种鸟,但是编程时却不能将二者塑模成is-a 关系。
因为一般而言鸟都是会飞的,所以我们很自然的在鸟类中会写一个成员方法:飞行。
但是,企鹅会飞吗?显然不会,那么企鹅是一种鸟,但是企鹅却不会飞,这就会导致如果将二者塑模成is-a 关系时出现问题。
可以采取的做法:在鸟基类中不写:飞行这种行为。继承自会飞的鸟的类中写上飞行方法。
例如现实生活中的经验:正方形是一种矩形,但是编程时却不能将二者塑模成is-a 关系。
因为对于矩形来说,有一种行为,即:可以只改变高度,而不改变宽度。但是,对于正方形来说,只要改变了高度或者宽度中的任意一个,另外一个就应该被改变,否则它不再属于正方形。于是,一种可以作用于矩形的行为,却不能作用于正方形。因此,不能将二者塑模成is-a关系。
总之,如果将两个类A、B,想要塑模成公共继承关系,B继承自A:那就必须做到A的所有行为都可以作用在B上。这才是能够塑模成is-a关系的关键。
请记住:
public继承意味is-a。适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derived class对象也都是一个bass class 对象。
Comments NOTHING