設計模式六大原則:里氏替換原則
阿新 • • 發佈:2019-09-07
里氏替換原則:
子類應當可以替換父類並出現在父類能夠出現的地方。比如:公司搞年度派對,都有員工都可以抽獎,那麼不管是新員工還是老員工,也不管是總部員工還是外派員工,都應當可以參加抽獎。
案例:
1 internal class Program 2 { 3 private static void Main(string[] args) 4 { 5 A a = new A(); 6 Console.WriteLine($"100-50={(a.func1(100, 50))}"); 7 8 B b = new B(); 9 Console.WriteLine($"100-50={(b.func1(100, 50))}"); 10 Console.WriteLine($"100-50={(b.func2(100, 50))}"); 11 12 Console.ReadKey(); 13 } 14 } 15 16 internal class A 17 { 18 public int func1(int num1, int num2) 19 { 20 return num1 - num2; 21 } 22 } 23 24 internal class B : A 25 { 26 //public int func1(int num1, int num2) 27 //{ 28 // return num1 + num2; 29 //} 30 31 public int func2(int num1, int num2) 32 { 33 return func1(num1, num2) + 100; 34 } 35 }
由上述程式碼可以看出,若類B在繼承類A時不注意,重寫了父類方法func1就會導致結果與預想的不一致,改變了父類原有的功能。故里氏轉換原則應滿足以下要求:
1、子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法
2、子類可以增加自己特有的方法
3、當子類的方法過載父類的方法時,方法的形參要比父類方法的輸入引數更寬鬆
4、當子類的方法實現父類的抽象方法時,方法的返回值應比父類更嚴格
優點:
可以大大減少程式的bug以及增強程式碼的可