看了看《大话设计模式》这本书,写的感觉太棒了,例子通俗易懂,简单的对话引出设计模式的例子。
里氏代换原则(LSP):子类必须能够替换掉他的父类[ASD]
子类继承了父类,所以子类可以以父类的身份出现!
那么问题来了,面向对象设计时,一个鸟类,一个企鹅类,鸟类中有一个 +飞()的方法,那么企鹅可以继承鸟这个类吗?
按照常识来说,企鹅是特殊的鸟,虽然不会飞也是鸟,所以可以继承!!
但是,这是错的,子类拥有父类所有非Private的行为和属性。鸟会飞,而企鹅不会,尽管在生物学上企鹅是鸟,但是在这个例子中,企鹅是不能继承这个鸟类的,因为企鹅不会飞,所以它在这里不能以父类的身份出现,除非企鹅会飞,才能去继承!!