法则4:Liskov替换法则(LSP) 2 f: {" Q: i( p. v( f) Y* J 0 ^9 @% n9 W2 S, I0 }4 y# h7 p+ q 5 s- O5 z% O+ ]% f使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。 ( D/ T, j+ d. r; r8 y) ^. E( Y # S2 e% l9 a' Q" w# X , [! d5 ~0 w2 f8 Z) k* j% V [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ] / x% k4 r, Z- |" j
! i* S2 |' W5 Z7 ~, f% z! E: s1 C( K0 |0 w- Q
Liskov替换法则 C" f" O$ U9 l: q' n( |7 P : g* p) t( h' r/ _3 g 7 {6 \+ a5 e. R& p! L( O1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 : U2 K. k( A/ @- C0 Y# V# a ! {2 s. l6 Z. a . Q8 C# w& p+ x4 V2.例如: + F( J2 A4 y" k# k
% Y R' P* \) T* m& y/ F ; }) ^% W+ k# H$ G. f方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作) 3 t1 |8 m; Y( `1 b, w
% U) n2 H3 {) \3 h
) }/ f/ z. N$ \
但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 8 `8 J& C& F* {! j; J6 i; j i$ p! k- Q- C" D
1 }8 u" X- e( ~
2 G) a' e0 j7 c! m! \; u6 r
! _; e! ~, g- K, ?* i- u& ] 2 C9 R" A0 f. k' } 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。3 a$ H. t) c- M/ C" T" b