Поля являются деталями реализации - их, как правило, не следует рассматривать как часть API - таким образом, вы можете точно изменить способ хранения вещей в дальнейшем.Если вы сделаете поле защищенным, оно будет доступно для подклассов, а не для того, чтобы подкласс только мог видеть API, на который они могут положиться.
Что если вы хотите ограничить, какие значения действительны для этого поля вболее поздняя дата?Когда он защищен, вы не получаете никакой проверки или чего-либо подобного.Подклассы могут положить туда любой старый мусор.Если вы держите его в секрете и предоставляете защищенный метод установки, вы можете применить соответствующую проверку.
Вкратце: рассматривайте ваши клиенты через субклассификацию как клиентов во многом так же, как ваши клиенты через вызов.Дайте им API для работы и сохраните детали реализации в секрете.