在面向?qū)ο笤O(shè)計、面向?qū)ο蟪绦蛟O(shè)計等領(lǐng)域做瞪,
Is-a
描述的是類的父子繼承關(guān)系搁嗓。
當(dāng)一個類S繼承另外一個類F時,我們一般會說這是子類S繼承父類F箱靴,或說類F是類S的父類腺逛。換句話說即為
S is a F .
S被包含在F內(nèi),或說F包含S衡怀。更為一般得說棍矛,概念體S物是概念體F物的特殊化,而概念體S物是概念體F物的一般化抛杨。
舉例:
三角形是一個多邊形够委;外科醫(yī)生是一個醫(yī)生;蘋果是一個水果······
那如果說
黑板是一個教室怖现。
顯然茁帽,黑板怎么可能是教室呢?這明顯不滿足‘Is-a’關(guān)系屈嗤。但是退一步思考潘拨,黑板和教室的確是有關(guān)聯(lián)的,這點是不可否認(rèn)的饶号。只是它們之間的關(guān)系并非‘Is-a’铁追,而是‘Has-a’。
如果說
教室有一個黑板茫船。
這樣就更加符合邏輯了琅束,在面向?qū)ο蟪绦蛟O(shè)計中,這表示教室?guī)в泻诎宓膶嵗兞克闾浮R簿褪钦f教室會有一個黑板的引用涩禀,但是教室并沒有繼承黑板。
Summary:
在實際面向?qū)ο缶幊踢^程中濒生,如果想知道某物是否應(yīng)該繼承另一物時埋泵,就可以使用‘Is-a’測試來檢驗。
Is-a測試適用于在繼承層次的任何地方。如果你的繼承層次樹設(shè)計得很好丽声,那么所有的子類都應(yīng)該通過任何一個上層父類的Is-a測試礁蔗。
參考:
- Is-a 維基百科
- “Head First Java”(中文版)