Одна из первых вещей, которые я делаю, когда делаю подкласс класса, - это изменение группы частных методов на защищенные.
Некоторые рассуждения о privateпротив protected методов :
privateметоды предотвращают повторное использование кода. Подкласс не может использовать код в закрытом методе и может нуждаться в его повторной реализации или повторной реализации метода (ов), которые изначально зависят от закрытого метода & c.
С другой стороны, любой метод, который не private может рассматриваться как API, предоставляемый классом «внешнему миру», в том смысле, что сторонние подклассы также рассматриваются как «внешний мир», как кто-то другой предложил в своем ответе. уже.
Это плохо? - Я так не думаю.
Конечно, (псевдо) публичный API блокирует первоначального программиста и препятствует рефакторингу этих интерфейсов. Но с другой стороны, почему программист не должен разрабатывать свои собственные «детали реализации» таким чистым и стабильным способом, как его общедоступный API? Должен ли он использовать privateтак, чтобы он мог быть небрежным в структурировании своего "частного" кода? Думая, может быть, он мог бы почистить это позже, потому что никто не заметит? - нет
Программист должен также немного подумать о своем «частном» коде, чтобы структурировать его таким образом, чтобы это позволяло или даже способствовало повторному использованию как можно большего количества кода. Тогда не приватные части могут не стать таким бременем в будущем, как некоторые опасаются.
Много кода (фреймворка), который я вижу, принимает непоследовательное использование private:, protectedобычно встречаются не финальные методы, которые делают только что-то большее, чем делегирование частному методу. protectedНеокончательные методы, чей контракт может быть выполнен только через прямой доступ к приватным полям.
Эти методы не могут быть логически переопределены / улучшены, хотя технически нет ничего, что могло бы сделать это (компилятором) очевидным.
Хотите расширяемость и наследование? Не делай свои методы private.
Не хотите, чтобы определенное поведение вашего класса изменилось? Сделай свои методы final.
Неужели ваш метод не может быть вызван вне определенного, четко определенного контекста? Сделайте свой метод privateи / или подумайте, как сделать требуемый четко определенный контекст доступным для повторного использования через другой protectedметод-обертку.
Вот почему я рекомендую использовать privateэкономно. И не путать privateс final. - Если реализация метода жизненно важна для общего контракта класса и, следовательно, не должна быть заменена / переопределена, сделайте это final!
Для полей privateне очень плохо. До тех пор, пока поле (я) может быть разумно «использовано» с помощью соответствующих методов (это не так getXX() или setXX()!).