面向对象编程的思想(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,只有在子类可以完全替代父类是,父类才是真正得到了复用。子类可以在父类的基础上添加新的行为。在面向对象的编程中,继承是抽象化的具体实现。

优点:里氏替换原则,舍得使用父类模块无需修改,通过使用不同的子类实现不同的扩展,是对实现抽象化的具体步骤的规范。

后记:面向对象编程中,同一个继承体系中的对象应该具有共同的行为特征,对代码的重用从抽象转焕成实现。


posted @ 2015-04-12 16:26  叕叒双又  阅读(114)  评论(0编辑  收藏  举报