打字猴:1.700454569e+09
1700454569
1700454570 //给士兵一支枪
1700454571
1700454572 public void setGun(AbstractGun_gun){
1700454573
1700454574 this.gun=_gun;
1700454575
1700454576 }
1700454577
1700454578 public void killEnemy(){
1700454579
1700454580 System.out.println(“士兵开始杀敌人……”);
1700454581
1700454582 gun.shoot();
1700454583
1700454584 }
1700454585
1700454586 }
1700454587
1700454588 注意粗体部分,定义士兵使用枪来杀敌,但是这把枪是抽象的,具体是手枪还是步枪需要在上战场前(也就是场景中)前通过setGun方法确定。场景类Client的源代码如代码清单2-4所示。
1700454589
1700454590 代码清单2-4 场景类
1700454591
1700454592 public class Client{
1700454593
1700454594 public static void main(String[]args){
1700454595
1700454596 //产生三毛这个士兵
1700454597
1700454598 Soldier sanMao=new Soldier();
1700454599
1700454600 //给三毛一支枪
1700454601
1700454602 sanMao.setGun(new Rifle());
1700454603
1700454604 sanMao.killEnemy();
1700454605
1700454606 }
1700454607
1700454608 }
1700454609
1700454610 有人,有枪,也有场景,运行结果如下所示。
1700454611
1700454612 士兵开始杀敌人……
1700454613
1700454614 步枪射击……
1700454615
1700454616 在这个程序中,我们给三毛这个士兵一把步枪,然后就开始杀敌了。如果三毛要使用机枪,当然也可以,直接把sanMao.killEnemy(new Rifle())修改为sanMao.killEnemy(new MachineGun())即可,在编写程序时Solider士兵类根本就不用知道是哪个型号的枪(子类)被传入。
1700454617
1700454618 注意 在类中调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则。
[ 上一页 ]  [ :1.700454569e+09 ]  [ 下一页 ]