( _3 X$ d& T d7 `& y! ]) P . ?5 o+ Q) r$ b _ [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ] % ?$ O& G4 K, \4 L2 K( [, m6 O& C8 w# I$ ~5 j; x2 ~
8 M' h% E5 O# NLiskov替换法则 8 r" v2 s- j# u5 v$ Z 3 C; N) [9 B1 J# e6 P2 a6 e$ Z4 I- p7 v/ j' n( o, s0 B
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 / V z) ^! Y& L2 D b ; t! B2 E: y9 I ) _% t H" p$ j5 V/ @2.例如: 1 E, F4 k& x8 U& ]$ f. y" V% q) O5 {. U2 M
7 @9 o: h4 V6 J( y4 T# e
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作) : Y9 v- E- C, [* ?; K& j
9 B4 K; {5 v6 z; D ; z% g7 G& f6 L: Z- {/ p2 E 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 5 i$ R2 U5 {, ?3 C
6 Q8 T4 u* w& r8 e 0 L6 X0 c- y& W' {2 S; \8 Y * {% J1 r1 Z/ B
# e3 L: G& m# ^/ ]+ H! c * n1 O# T0 T7 [) o* \- J/ J 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。 a! V1 n) @& N5 T8 E1 z$ g6 A% i. _% i& ]! a u
4 t# @' a' H* q5 W7 ^ T这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。: i" i9 E; d- O
x& Y- I- Y" o/ n i
& @3 E' z9 B! N" \! p1 M' A >>更多一些面向对象得设计法则(4)