2012-09-13 2 views
1

Я понимаю, что нужно использовать protected, когда нужно сделать переменную видимой во всех классах, расширяющих текущий класс, но что это значит? Каковы наиболее распространенные случаи использования?Использовать случаи, чтобы определить переменную как `protected`?

Я полагаю, что другим способом задать вопрос будет, каковы ключевые случаи, когда вы хотите, чтобы переменная класса была видна из дочерних элементов класса, но не из внешних классов.

+0

Как защищенный в java, защищенный в Java также предоставляет переменную всем классам в одном пакете, что значительно снижает ее защиту. – Wug

+0

@Niko - спасибо за указатель, но ответы действительно не дают вариантов использования. – JDelage

ответ

2

Большинство вариантов использования защищенного модификатора доступа, с которым я столкнулся, являются инстанциями 'Template Method' pattern.

В этом шаблоне деталь алгоритма делегируется подклассу.

Фактически защищенный доступ создает дыру в ваших инвариантах класса: подкласс может злоупотреблять членом таким образом, чтобы ваш инвариант больше не выполнялся.

В большинстве случаев есть лучшие альтернативы дизайна, чем защищенный доступ, dependency inversion является первым, кто приходит на ум.

Советую? Не публикуйте внутренние объекты вашего объекта всем, кому вы не доверяете. Используйте «защищенный» с осторожностью!

1

Защищенные переменные помогают эффективно получать доступ к переменным базового класса без прохождения ограничений get/set.

Полезность защищенных переменных имеет важное значение для разработки библиотек, которые должны использоваться в других приложениях. Это помогает вам свободно использовать переменные в среде lib, не делая их общедоступными, и когда вы завершаете унаследованный класс, они запрещены для внешней среды.

Смежные вопросы