Q 為什么不推薦使用繼承?
A 繼承是面向?qū)ο蟮乃拇筇匦灾? 用來表示類之間的 is-a 關(guān)系, 可以解決代碼復(fù)用的問題. 雖然繼承有諸多作用, 但繼承層次過深, 過復(fù)雜, 也會影響到代碼的可維護(hù)性. 在這種情況下, 我們應(yīng)該盡量少用, 甚至不用繼承
Q 組合相比繼承有哪些優(yōu)勢?
繼承主要有三個(gè)作用:
表示 is-a 關(guān)系, 支持多態(tài)特性, 代碼復(fù)用. 而這三個(gè)作用都可以通過組合, 接口, 委托三個(gè)技術(shù)手段來達(dá)成, 除此之外, 利用組合還能解決層次過深, 過復(fù)雜的繼承關(guān)系影響代碼可維護(hù)性的問題
Q 如何判斷是該用組合還是該用繼承?
A 盡管我們鼓勵(lì)多用組合少用繼承, 但是組合也并不是完美的, 繼承也并非一無是處. 在實(shí)際的項(xiàng)目開發(fā)中, 我們還是要根據(jù)具體的情況,來選擇該用繼承還是組合. 如果類之間的繼承結(jié)構(gòu)穩(wěn)定, 層次比較淺, 關(guān)系不復(fù)雜, 我們就可以大膽的使用繼承. 反之, 我們就應(yīng)該使用組合來替代繼承. 除此之外 還有一些設(shè)計(jì)模式, 特殊的應(yīng)用場景, 會固定使用組合 或者繼承