在线培训:面向对象设计在线培训:面向对象设计第七章第七章目标掌握面向对象设计原则之里氏代换原则概述面向对象设计原则在使用面向对象思想进行系统设计时,总结出了若干面向对象设计原则,分别是单一职责原则开闭原则里氏代换原则依赖注入原则接口分离原则迪米特原则组合/聚合复用原则这些原则是面向对象设计的基石,坚持这些原则是提升面向对象设计质量的重要保障里氏代换原则定义:LSP:LiskovSubstitutionPrinciple,Liskov是该原则的提出者该原则的思想是:在任何父类出现的地方都可以用它的子类来代换,而不影响功能里氏代换原则是对开闭原则的扩展采用开闭原则必然用到抽象和多态,而这离不开继承里氏代换原则就是对如何良好继承提出了衡量依据里氏代换原则举例1:classBird{publicvoideat(){}publicvoidfly(){System.out.println("用翅膀飞");}}classPenguinextendsBird{}classTest{publicstaticvoidshowFly(Birdbird){bird.fly();}publicstaticvoidmain(String[]args){showFly(newBird());showFly(newPenguin());}}企鹅继承鸟类不符合LSP,因为企鹅不会飞,不能完全代换父类企鹅继承鸟类不符合LSP,因为企鹅不会飞,不能完全代换父类里氏代换原则举例2:classDolphinextendsPet{publicvoidincrediBubble(){System.out.println("神奇泡泡打砖块");}}publicclassTest{publicstaticvoidshowPlay(Petpet){if(petinstanceofDog){Dogdog=(Dog)pet;dog.catchingFlyDisc();}elseif(petinstanceofPenguin){Penguinpgn=(Penguin)pet;pgn.swimming();}}publicstaticvoidmain(String[]args){Dolphindolphin=newDolphin();showPlay(dolphin);}}子类Dolphin无法代换父类Pet子类Dolphin无法代换父类Pet里氏代换原则总结:里氏代换原则是对开闭原则的扩展开闭原则的实现离不开继承,而里氏代换原则对如何良好继承提出了衡量依据