设计模式 里氏替换原则
如果对每一个类型为 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));