2012-09-13 36 views
1

據我所知,應該使用protected當一個人想讓變量在所有擴展當前類的類中都可見時,但這到底意味着什麼?什麼是最常見的用例?用例將變量定義爲`protected`?

我想另一種方法來構建問題將是,什麼是關鍵的情況下,當你想要一個類變量是可見的類的子節點,但不是從外部類。

+0

另外,java中的protected還將變量公開給同一個包中的所有類,這顯着減少了它的保護。 – Wug

+0

@Niko - 感謝您的指針,但答案並沒有真正提供用例。 – JDelage

回答

2

我遇到的'protected'訪問修飾符的大多數用例都是'Template Method' pattern的實例。

在此模式中,算法的細節被委託給子類。

實際上,受保護的訪問會在您的類不變中創建一個洞:子類可能會濫用成員,使得您的不變量不再成立。

大多數情況下,有更好的設計替代方案比受保護的訪問,dependency inversion是第一個想到的。

我的建議?不要將你的對象的內部發布給任何你不信任的人。謹慎使用「受保護」!

1

受保護的變量有助於有效訪問基類的變量,而無需通過get/set約束。

受保護變量的用處對開發應該在其他應用程序中使用的庫很重要。它可以幫助您在lib環境中自由使用變量而不公開它們,並且當您最終確定繼承的類時,它們將被禁止到外部環境中。