步枪

设计原则之里氏替换原则

家住魔仙堡 提交于 2019-12-21 09:38:21
定义:所有引用基类的地方必须能透明地使用其子类的对象。问题:有一功能P1,由类A来完成。现在需要将功能P1进行扩展,扩展后的功能为P(P由原有功能P1和新功能P2组成)。 功能P由类A的子类B来完成,子类B在完成新功能P2的同时有可能会导致原有功能P1发生故障。解决:当使用继承时,遵循里氏替换原则。类B继承类A时,除添加新的方法完成新增功能P2外,尽量不要重写父类A的方法, 也尽量不要重载父类A的方法。举个栗子:士兵使用武器进行射击,包括武器的类别和特点的介绍。情况一:士兵使用手枪进行射击,实现结果为:手枪小,便于携带;手枪一次只能发射一颗子弹;手枪开始射击。 1. 新建一个手枪类HandGun,介绍手枪的特点,代码如下: 2. 新建一个士兵类Soldier,包含手枪的相关方法,代码如下: 3. 在类LSPFragment中实现士兵用手枪进行射击,代码如下: 4. 运行后的结果为: 现在我们需要实现士兵使用步枪进行射击,于是我们就要新增步枪类RifleGun,并且要去修改士兵类Soldier。情况二:士兵使用步枪进行射击,实现结果为:步枪长,不益于携带;步枪可以连续射击;步枪开始射击。 1.新建一个步枪类RifleGun,介绍步枪的特点,代码如下: 2. 修改士兵类Soldier,包含手枪和步枪的相关方法,代码如下: 3. 修改类LSPFragment