设计模式 里氏替换原则

如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。

有点绕口,通俗的讲:

B类继承A类后,可以新增功能,但尽量不要重写A类的方法,也不要重载A类后方法。

子类可以扩展父类的功能,但不能改变父类原有的功能:

  • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  • 子类中可以增加自己特有的方法。
  • 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
  • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

我们有一个类实现减法:

class MathFormula{
  public int Math1(int a,int b){
        return a - b;
    }
  }

还有个继承的办法

class MathSumFormula:MathFormula{
  public int Math1(int a,int b){
            return a + b;
   }
   public int Math2(int a,int b){
            return Math1(a, b) + 100;
    }
 }

因为无意重写了Math1所以导致结果错误。

MathSumFormula mathSumFormula = new MathSumFormula();
Console.WriteLine(mathSumFormula.Math2(10,10));

 

posted @ 2018-07-26 19:22  樱花落舞  阅读(199)  评论(0编辑  收藏  举报