- 在线时间
- 3 小时
- 最后登录
- 2024-1-13
- 注册时间
- 2009-9-8
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 16 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 5
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   0% 该用户从未签到
 |
法则4:Liskov替换法则(LSP) 0 r( m6 k( b6 W: l" [" I
! t2 X& E1 x& ]; b( b
, } s. t" Q. ]: T+ p+ @& o使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。 ; \! I& m" G" o( ~+ U/ A E' E
+ m6 x+ {+ X5 b7 ]3 p: O) w) [ s! |( e
[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ] ) N: o- M8 D8 C* U7 O
* Z8 p) L2 M% f9 U1 ~& O0 s
8 R. ~! N3 K* b$ R, J2 T% X
Liskov替换法则 + d; ?- C0 X3 r- K! p
5 a' T2 p5 i: G" t& e! T
* w% S- N( K% w |( u; O
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 $ j( X" N( v6 V& A$ N: u& S! k
( Y0 V7 }: R J- n- g8 }, N; A( j
2 J( c8 {2 B3 {3 J* e
2.例如: * ~9 ?9 K& ~) X; _: D# X
# ^" x' |$ Z. U' s
4 }" b# }3 A8 S! |2 [1 `8 t
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)
0 E. R6 F: l; b! ?$ {
1 U q. R Z; d5 W
5 g6 f/ o1 s, n" s 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 , w9 x3 R' n4 |& `: V) u3 Z
% \" ?# _5 ~& \& i; p/ T, L
( u; ~8 l/ [+ E/ w- a 4 V# v7 i6 Q% S+ @' P
8 H, |! I' z) X, k9 v- k
9 H6 _. g& N9 h5 b! x* T6 f 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。3 w8 C, T1 Y% A7 x, a9 n; A" I; y
. p9 R2 f4 o0 j$ O7 |& _
9 k6 v, S1 ]& C T这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。6 c6 O% P7 Y) R. U) R
- {$ o+ D4 T) i7 O0 S& G, W" [6 V/ [! d
>>更多一些面向对象得设计法则(4) |
zan
|