6 L) {# J( n0 C+ Y0 ] [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ] 4 |: k9 y' \6 W: D; }
0 B4 p2 N8 U2 a
7 n; B" L7 ]1 }, Z# |3 z8 w9 ?1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 # X) C' i" q1 ~+ ` S - K4 e& G( Y- }0 a! d8 t" H$ E* X+ I% \2 Y& y# Z4 ]) ^7 P2 V
2.例如: & c0 b; }2 q7 P5 C9 y1 ?! |$ L " d K6 x! W* S5 L* h* F( c. J; A8 z0 [ }: Q( u) ^ h! g
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作) 7 ^; x2 G7 ~- @1 i; [" q2 [% f$ I3 `/ T5 d/ c
! d1 W% ?% e, W3 h4 a0 s
但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 # v( K2 I, o" Y. O; q0 ]2 \9 L) n3 ~
0 s9 f1 q# q: l $ W! {3 s7 t) M% a7 X3 B! ^, x" A9 C 7 C3 ^7 N' N, W& g' _. J$ P, v5 Y7 O0 a8 s
3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。, Y6 E8 |" E, x& C0 z- q, R# t
* U {# p0 o @; c3 ?8 W 5 ]+ S$ n# D& H ]8 \这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。/ @1 M9 q' v. p# P+ g5 A0 ?