欢迎来到天天文库
浏览记录
ID:41655375
大小:62.02 KB
页数:6页
时间:2019-08-29
《六大设计原则之“里氏替换原则”》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、通俗地讲,只要父类能出现的地方子类就可以出现,而FL替换为了类也不会产牛任何错误或异常,使用者可能根木就不需要知道是父类还是子类。但是,反过来就不行了,有子类岀现的地方,父类未必应能适应。里氏替换原则为良好的继承定义了一个规范,一句简单的定义包括了四层含义:1、子类必须完全实现父类的方法父类:AbstractGunJava代码publicabstractclassAbstractGun{2.3.abstractvoidshoot();4.}Java代码publicabstractclassAbstractGun{2.3.abstractvoidshoot();4・}
2、子类之步枪:RifleJava代码1.publicclassRifleextendsAbstractGun{2.3.@Override4.voidshoot(){5.System.out-printIn("步枪射击•••");6.}7.}Java代码1.publicclassRifleextendsAbstractGun{2.3.^Override4.voidshoot(){5.System•out.printIn(H步枪射击•••");6.}7.}子类之机枪:MachineGunJava代码publicclassMachineGunextendsAbstractG
3、un{2.3.^Override3.voidshoot(){4.System.out.printIn(H机枪射击•••”);5.}6.}Java代码1.publicclassMachineGunextendsAbstractGun{2.3.@Override4.voidshoot(){5.System•out•printIn(H机枪射击•••");6.}7.}士兵类:SoldierJava代码1.publicclassSoldier{2.3.privateAbstractGungun;4.5.//务必要用父类或接口6.publicvoidsetGun(Abstrac
4、tGun_gun){7.this>gun=_gun;8.}9.10.publicvoidkill(){11-System•out.printIn(M±兵开始射击•••");12.this.gun・shoot();13.}14.}Java代码1.publicclassSoldier{2.3.privateAbstractGungun;4.5.//务必要用父类或接口6.publicvoidsetGun(AbstractGun_gun){7.this.gun=_gun;8.}9.10.publicvoidkill(){11-System.out•printIn(*'±兵开
5、始射击•••");12.this.gun.shoot();13.}14.}场景类:Java代码1.publicclassRun{2.3.publicstaticvoidmain(String[]args){4.Soldiersanmao=newSoldier();//创建新兵三毛5.sanmao.setGun(newRifle());//给予一把步枪6.sanmao.kill();//三毛开始杀敌7.}8・}Java代码1.publicclassRun{2.3.publicstaticvoidmain(String[]args){4.Soldiersanmao=ne
6、wSoldier();//创建新兵三毛5.sanmao.setGun(newRifle());//给予一把步枪6.sanmao.kill();//三毛开始杀敌7.}8.}注意:在类中调用其他类时务必要用父类或接口,若不能使用,则说明类的设计已经违背原则。常见畸型继承举例:接上面的应用举例,如果我们要把一把玩具枪给三毛,那么新增类:ToyGunJava代码2・publicclassToyGunextendsAbstractGun{2.3.//玩具枪是不能射击的,但是为了塞给三毛,必须要继承父类4.//继承后又要求实现方法,怎么办?我们一般就强制继续一个5.^Overr
7、ide6.voidshoot(){7.//玩具枪的性质是无法射击的,所以无法真正实现该方法8.}9・}Java代码1.publicclassToyGunextendsAbstractGun{2.3.//玩具枪是不能射击的,但是为了塞给三毛,必须要继承父类4.//继承后又要求实现方法,怎么办?我们一般就强制继续一个5.^Override6.voidshoot(){7.//玩具枪的性质是无法射击的,所以无法真正实现该方法8・}9・}通常应用中经常发牛如上情况,按LSP原则,则要注意:若子类不能完整地实现父类的方法,或者父类的某些方法在子类中发生畸变,则建议断开父子继
此文档下载收益归作者所有