x8 {! W+ w; Y/ j, }& `使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。 3 v. B' ?+ j( z- n+ V$ {
, s% Y& x# N8 O ]* r3 r/ q" K- G3 [: ?0 m6 U
[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ] 5 y/ Y: d4 W; _ C- ?
2 t: k2 C: T6 P8 d, z0 w! S2 `8 c Z6 l* _1 F6 ^* V( d
Liskov替换法则 " @# Y, S- U/ M- ?1 ]1 J; _' B( f
+ Q& u: l( V% l& M8 b- P) P) F; R
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 . N1 _0 y" }0 {# c; j. z* ]) a
8 _* j X( g$ F( @$ R
( y- U; K- s1 L* v2.例如: 3 B' j' d) A* D } ; j1 ?- ?/ i) K+ o + Y1 h+ e$ D5 D8 c6 x& u方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作) 9 \1 ]4 q7 c; P& I
( f9 F( O5 h+ N" J- Q! e4 Z% K' \7 c
但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 7 r0 o. y6 ~ D' X# H' W
- {7 [+ w1 w: \. l 8 M1 q3 A. }: l( F * _/ L) e# |( A# d
7 u. [& h6 G$ X1 r0 D& W/ ~7 G, g* J1 N
3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。 Z7 B2 b$ b7 l5 D e
5 ~: S& I' D7 D3 }3 M1 a. L! k