面向对象编程的思想(2)
名称:里氏替换原则(Liskov Substitution Principle)LSP
核心:在任何父类出现的地方都可用它的子类替代。换言之:子类型必须能够替换掉他们的父类型。
例子:例如我们设计一个OldCarpenter类:
public class OldCarpenter{
public void MakeFurniture(){
System.out.println("做出一把椅子!");
}
使用YoungCarpenter继承OldCarpenter类:
public class YoungCarpenter extends OldCarpenter{
//覆盖父类的方法
@Override
public void MakeFurniture(){
System.out.println("徒弟做出一把椅子!");
System.out.println("将椅子进行装饰!");
}
客户端测试代码:
public static void main(String[] args){
OldCarpenter carpenter = new OldCarpenter();
System.out.println("原来找老木匠做椅子");
carpenter.MakeFurniture();
System.out.println("后来老木匠让徒弟代做");
carpenter = new YoungCarpenter();
carpenter.MakeFurniture();
运行结果很明显:在这个过程中,小木匠替代了老木匠的座椅子,对顾客是没有影响的。
总结:上边的YoungCarpenter类的对象完全可以替代OldCarpenter,只有在子类可以完全替代父类是,父类才是真正得到了复用。子类可以在父类的基础上添加新的行为。在面向对象的编程中,继承是抽象化的具体实现。
优点:里氏替换原则,舍得使用父类模块无需修改,通过使用不同的子类实现不同的扩展,是对实现抽象化的具体步骤的规范。
后记:面向对象编程中,同一个继承体系中的对象应该具有共同的行为特征,对代码的重用从抽象转焕成实现。