概述
里氏替换原则
概念:英文全称是Liskov Substitution Principle,缩写是LSP.第一种定义是:如果对每一个类型为S的对象s1,都有类型T定义的t2,使得以T定义的所有程序P在所有的对象s1都代换成t2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。第二种定义:所有引用基类的地方必须能透明地使用其子类的对象。
面向对象语言的三大特点是继承,封装,多态,里氏替换原则就是依赖于继承,多态这两大特性。通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。体现了抽象的特点。举例如下:
public abstract class AbstractGun {
public abstract void shoot();
}
public class Rifle extends AbstractGun{
@Override
public void shoot() {
System.out.println("步枪射击...");
}
}
public class Handgun extends AbstractGun{
@Override
public void shoot() {
System.out.println("手枪射击...");
}
}
public class Solider {
private AbstractGun gun;
public void setGun(AbstractGun g){
this.gun=g;
}
public void killEnemy(){
System.out.println("士兵开始杀敌人....");
gun.shoot();
}
}
public class Client {
public static void main(String[] args) {
Solider solider = new Solider();
//这里面既可以传Rifle,也可以传Handgun,都是AbstractGun的子类,体现里氏替换原则
solider.setGun(new Rifle());
solider.killEnemy();
}
}
士兵开始杀敌人....
步枪射击...
1)代码重用,减少创建类的成本,每个子类都拥有父类的方法和属性;
2)子类和父类基本相似,但又与父类有所区别;
3)提高代码的可扩展性
继承的缺点:
1)继承是侵入性的,只要继承就必须拥有父类的所有属性和方法;
2)可能造成子类代码冗余,灵活性降低,因为子类必须拥有父类的属性和方法。
2)可能造成子类代码冗余,灵活性降低,因为子类必须拥有父类的属性和方法。
最后
以上就是热心小伙为你收集整理的设计模式笔记—里氏替换原则的全部内容,希望文章能够帮你解决设计模式笔记—里氏替换原则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复