面向对象设计之里氏替换原则(Liskov Substitution Principle)

版权声明:LemonSnm https://blog.csdn.net/LemonSnm/article/details/83049384

里氏替换原则:

 子类型必须能够替换它们的基类型。即任何基类可以出现的地方,子类一定可以出现。

 优点:

  1. 低耦合
  2. 可以很容易实现同一父类下各个子类的互换,而客户端可以毫无察觉。

 实例:

士兵使用不同的枪,击毙敌人。

抽象武器枪:

package com.szxy.LemonSnm;

public abstract  class WeaponGun {
    public abstract void shoot(); //射击
}

AK47:

package com.szxy.LemonSnm;

public class AK47 extends WeaponGun  {
    @Override
    public void shoot() {
        System.out.println("用AK47射击");
    }
}

手枪:

package com.szxy.LemonSnm;

public class HandGun extends  WeaponGun  {
    @Override
    public void shoot() {
        System.out.println("用手枪射击");
    }
}

 抽象枪:

package com.szxy.LemonSnm;

public abstract class Gun {
    public abstract void shoot();

}

玩具枪:

package com.szxy.LemonSnm;

public class ToyGun extends Gun{
    @Override
    public void shoot() {
        System.out.println("用玩具枪射击");
    }
}

士兵:

package com.szxy.LemonSnm;

public class Soldier {
       public void killenemy(WeaponGun gun){
           gun.shoot();
           System.out.println("击毙了敌人");
       }

    public void killenemy(Gun gun){
        gun.shoot();
        System.out.println("被敌人击毙");
    }
}

 客户端测试:

package com.szxy.LemonSnm;

public class Main {
    public static void main(String[] args) {
        System.out.println("this is LSP method");
        Soldier soldier = new Soldier();
        soldier.killenemy(new AK47());
        soldier.killenemy(new HandGun());
        soldier.killenemy(new ToyGun());

    }
}

猜你喜欢

转载自blog.csdn.net/LemonSnm/article/details/83049384