$ A8 M) X+ O4 {8 j) ~* X+ P1 X8 H8 u . D4 |% p5 \+ C2 ?使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。 4 O" n; _8 A/ e" C0 m3 x& O. | , J9 i2 Y, y! z/ W4 D* d: a ; j$ @8 z) h' e1 `3 R [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ] 8 D4 t! b& q( q7 K: c3 G. d7 U( G( y8 ?8 H/ n! |/ c3 o0 d
9 W- m4 @* f% f+ `* h+ bLiskov替换法则 ) s" z$ k: U, \% F 1 c5 d4 O/ n1 B) j: ~. L* |& m( g4 ]- R
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 * Z8 s& u( a2 o ( k! v7 D* }! @' L8 E" L5 H5 ?) w& M. w$ s7 C2 P2 T
2.例如: $ R/ H1 Q5 ~, g) ~1 u. y- ^$ ?. C( H+ L& O
) j$ o. i3 T+ ?( t$ b" f
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作) 4 E7 m4 v! D# Z. z+ E' L. _
: A3 y! M! u" E# i8 W6 \3 F3 n; S( m) H6 a
但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 $ \+ m: i5 v5 v# a9 o5 v, ]9 {) ~" s' E
/ o# b- }% M1 T' _6 L6 P
( @6 x7 P; F/ z 5 E \+ [0 x! y- S+ \+ D- {/ E( A
y; a5 t6 I( {+ J U8 {
3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。( p' {- y$ F2 y7 p8 Q4 o
; r$ l( m: H. ~