六大设计原则之“里氏替换原则”

六大设计原则之“里氏替换原则”

ID:41655375

大小:62.02 KB

页数:6页

时间:2019-08-29

六大设计原则之“里氏替换原则”_第1页
六大设计原则之“里氏替换原则”_第2页
六大设计原则之“里氏替换原则”_第3页
六大设计原则之“里氏替换原则”_第4页
六大设计原则之“里氏替换原则”_第5页
资源描述:

《六大设计原则之“里氏替换原则”》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

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原则,则要注意:若子类不能完整地实现父类的方法,或者父类的某些方法在子类中发生畸变,则建议断开父子继

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。