第15條:使類和成員的可訪問性最小化
正確使用public、protected、private三個修飾符
第16條:要在公有類而非公有域中使用訪問方法
對象屬性應(yīng)該私有化,然后提供getter、setter方法。而不是公有化屬性,使用對象.屬性(obj.field)訪問
第17條:使可變性最小化
JDK中包含許多不可變的類(使用 final 修飾符),包含String、基本類型的包裝類。不可變對象本質(zhì)上是線程安全的,不要求同步
第18條:復(fù)合優(yōu)先于繼承
繼承需要清楚的知道父類的具體代碼邏輯,不然覆蓋方法可能會出現(xiàn)奇怪的BUG。而復(fù)合,是把父類作為成員變量,調(diào)用其方法即可
第19條:要么設(shè)計繼承并提供文檔說明,要么禁止繼承
參考第18條
第20條:接口優(yōu)先抽象類
一般都是面向接口編程,抽象類適合抽取子類的代碼作為公共代碼,子類只需要實現(xiàn)抽象方法即可
第21條:為后代設(shè)計接口
在接口里添加默認(rèn)方法,存在風(fēng)險,應(yīng)當(dāng)謹(jǐn)慎
第22條:接口只用于定義類型
現(xiàn)在一般都有專門的常量類,跟這條相違背。但是專門的常量類利于維護(hù)
第23條:類層次優(yōu)于標(biāo)簽類
沒在其他地方見過標(biāo)簽類的寫法,面向接口編程就可以避免這種情況
第24條:靜態(tài)成員類優(yōu)先于非靜態(tài)成員類
- 非靜態(tài)成員類每個實例都持有一個外部對象的引用,保存這份引用需要消耗時間和空間
- 靜態(tài)成員類是外部類的一個靜態(tài)成員,與外部類其他的靜態(tài)成員一樣,遵守同樣的可訪問性規(guī)則
第25條:限制源文件為單個頂級類
除了內(nèi)部類的情況,不要在一個文件中寫兩個及以上的類