美文网首页
设计原则——里氏替换原则

设计原则——里氏替换原则

作者: 写一本2000000的书 | 来源:发表于2019-08-22 17:06 被阅读0次

前沿
继承:将保持已有类的特性而构造新类的过程称
派生:在已有类的基础上新增自己的特性而产生新类的过程称为派生
里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。规范继承与派生的规则。

  • 1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  • 2.子类中可以增加自己特有的方法。
  • 3.当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
  • 4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
// 我们需要完成一个两数相减的功能,由类A来负责。

class A{
    public int func1(int a, int b){
        return a-b;
    }
}
// 需要增加一个新的功能:完成两数相加,然后再与100求和,由类B来负责

class B extends A{
    public int func1(int a, int b){
        return a+b; // 不小心重写了父类方法
    }
    
    public int func2(int a, int b){
        return func1(a,b)+100;
    }
}

// 计算100 - 50 +100 = 150
B b = new B();
System.out.println("100-50="+b.func2(100, 50));
// 打印结果与实际不符合
100-50=250

总结:尽量不要重写父类方法,遵循里式替换原则

如果非要重写父类,上例中通俗的做法:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉,采用依赖、聚合,组合等关系代替。

class Base {
    public int func1(int a, int b){
        return a-b;
    }
}
class A extends Base{
    
}
class B extends Base{
    
    public A a = new A(); // 采用组合的方式
    
    public int func2(int a, int b){
        return this.a.func1(a, b) + 100;
    }
    
}
B b = new B();
System.out.println(b.func2(100, 50));

// 打印结果与实际符合
// 150

相关文章

  • 设计模式之里氏替换原则

    设计模式之里氏替换原则 里氏替换原则(LSP: Liskov Substitution Principle) 定义...

  • 里氏替换原则

    个人博客原文:里氏替换原则 设计模式六大原则之二:里氏替换原则。 简介 姓名 :里氏替换原则 英文名 :Lisko...

  • 里氏替换原则

    里氏替换原则 “里氏替换原则(Liskov Substitution Principle,LSP)” 定义 一:(...

  • 设计模式的设计原则

    设计模式的设计原则 面向对象五大设计原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 开闭原则 设计模...

  • 01-设计模式原则

    面向对象的设计原则 面向对象的设计原则也被称为SOLID。SOLID原则包括单一职责原则、开闭原则、里氏替换原则、...

  • Swift设计模式----目录

    面向对象设计原则: 开闭原则 单一职责原则 依赖倒置原则 接口分离原则 迪米特法则 里氏替换原则 面向对象设计模式...

  • [设计原则]里氏替换原则

    在面向对象的语言中,继承是必不可少的、非常优秀的语言机制,它有如下优点: 代码共享,减少创建类的工作量,每个子类都...

  • 设计原则——里氏替换原则

    前沿继承:将保持已有类的特性而构造新类的过程称派生:在已有类的基础上新增自己的特性而产生新类的过程称为派生里氏替换...

  • 设计原则:里氏替换原则

    定义:如果对于每一个类型为T1的对象O1,都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象O1都替...

  • 什么是【里氏替换】

    里氏替换(Liskov Substitution Principle,简称 LSP),同样也是设计原则之一,里氏替...

网友评论

      本文标题:设计原则——里氏替换原则

      本文链接:https://www.haomeiwen.com/subject/jiqnsctx.html