版权声明:LemonSnm https://blog.csdn.net/LemonSnm/article/details/83049384
里氏替换原则:
子类型必须能够替换它们的基类型。即任何基类可以出现的地方,子类一定可以出现。
优点:
- 低耦合
- 可以很容易实现同一父类下各个子类的互换,而客户端可以毫无察觉。
实例:
士兵使用不同的枪,击毙敌人。
抽象武器枪:
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());
}
}