Effective Java之使类和成员的可访问性最小化(十三)
對(duì)于類
對(duì)于類,只有public和package-private兩種訪問級(jí)別。
1.對(duì)于頂層的類來說,只有包級(jí)私有和公有兩種可能,區(qū)別是包級(jí)私有意味著只能在當(dāng)前包中使用,不會(huì)成為導(dǎo)出api的一部分,而公有意味著導(dǎo)出api,你有責(zé)任去永遠(yuǎn)支持它。所以,為了使訪問最小化,能包級(jí)私有就應(yīng)該聲明為包級(jí)私有。
2.對(duì)于包級(jí)私有類來說,如果只在某一個(gè)類中被使用,那么就直接讓這個(gè)包級(jí)私有類成為這個(gè)類的嵌套類,這樣就能讓訪問級(jí)別再次縮小。
對(duì)于成員
成員包括域,方法,嵌套類和嵌套接口
訪問級(jí)別有私有的,包級(jí)私有的,受保護(hù)的和公有的四種。
1.實(shí)例域絕對(duì)不能是公有的,聲明實(shí)例域是公有的,相當(dāng)于限制了對(duì)儲(chǔ)存在這個(gè)域中的值進(jìn)行限制的能力,破壞了封裝性。
而靜態(tài)域 也只有在提供常量的抽象類中,通過公有的靜態(tài)final域來暴露。
?
2. 設(shè)計(jì)類時(shí),應(yīng)當(dāng)把所有的其他成員都變成私有的。
只有當(dāng)同一個(gè)包中另一個(gè)類真正需要訪問一個(gè)成員的時(shí)候,才應(yīng)該刪除private修飾符,把該成員變成包級(jí)私有的。
其實(shí)這兩者都是類的實(shí)現(xiàn)的一部分,不會(huì)影響到他的api。
3.如果對(duì)于公有類的成員,訪問級(jí)別從包級(jí)私有變成保護(hù)級(jí)別時(shí),要額外小心,因?yàn)楸Wo(hù)的成員是導(dǎo)出api的一部分,必須得到永久支持。
4.方法覆蓋了超類中的一個(gè)方法,子類中的訪問級(jí)別就不允許低于父類的訪問級(jí)別。這個(gè)規(guī)則限制了方法的可訪問性的能力,保證可以使用超類的地方都可以使用到子類。
這就是為什么實(shí)現(xiàn)接口的方法都是public的原因,因?yàn)榻涌诘姆椒J(rèn)是public abstact的。
總結(jié)
以上是生活随笔為你收集整理的Effective Java之使类和成员的可访问性最小化(十三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Effective Java之谨慎地覆盖
- 下一篇: Effective Java之在公有类中