法则4:Liskov替换法则(LSP) & q( @6 M& \) K# d" O1 t
. [' F L3 H- E0 J5 G2 A3 h2 O
; e! L4 H/ S7 ]' F7 ]使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。 $ C8 F& v1 [) ]5 A% O8 Q7 R- t3 Z$ {) _4 t/ s% w( I' E( x
: W0 Z2 f$ `/ `; b% S4 m5 r
[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ] 3 k: K: l% b0 z* [) _2 I* `3 i9 v( \6 V3 m
! m& [1 r. p5 N$ N; bLiskov替换法则 * I' Q$ D+ ^3 E x U' w" i3 y
2 ~9 }2 q6 c c! q! @1 X1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 * l% `- x6 J, m7 ?
/ h$ X$ I2 r5 [( v. d8 o
; H4 B6 V) s/ l9 f- Z+ M6 _
2.例如: - l3 H% ]- v# X4 ^2 V
/ B( c8 t( e. v8 L8 m1 U; ]
: H3 ]7 T% |6 [
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作) + ^3 S2 u M w) @' j Q( u
5 m7 u: u9 M4 I. f6 ^( b' u3 K b ] A! [2 ` z
但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 + P3 a. c3 P/ _! j+ j- m$ c9 |) q9 J