защищенные данные в абстрактном классе

Мой вопрос касается, в частности, Java, абстрактных классов и использования защищенных данных. Мне говорят, что все данные должны быть частными, и используются только защищенные методы получения / установки.

Теперь я понимаю, что мы хотим защитить данные от прямых манипуляций случайными пользователями класса, и что общедоступные члены данных в целом являются сомнительной практикой. Я посмотрел на "Java защищенные поля против публичных получателей" (Java защищенные поля против общедоступных получателей ), но я все еще сомневаюсь, что:

protected int i;  

хуже в абстрактном классе, чем:

private int i;  
protected int geti();  
protected void seti(int j); 

Я просто не вижу обратной стороны, когда абстрактный класс существует именно для предоставления родительских / общих возможностей дочерним классам, а защищенная область предназначена для предоставления доступа детям, при этом защищая данные от случайных пользователей. Я отмечаю в вышеупомянутом вопросе, что большинство ответов, похоже, касаются вопроса о том, почему данные в целом должны быть частными, а не общедоступными. Я пытаюсь сосредоточить свой вопрос конкретно на данных, существующих в абстрактном родителе, предназначенном для использования детьми. Единственный разумный комментарий, который я слышал на сегодняшний день, состоит в том, что использование данных, защищенных родителями (например, int i выше), оставляет вас с кодом в дочернем классе, который ссылается на переменную, не объявленную в дочернем классе. Менее убедительный аргумент (см.Общий защищенный член данных в базовом классе? ) что вы можете захотеть изменить доступ когда-нибудь, и теперь вы должны соблюдать свой интерфейс. Это абстрактный класс, предназначенный для расширения в 100% случаев.

Спасибо! Конкретные ссылки на книги на Title / page # гораздо более полезны, чем ссылки на "... любой базовый текст программирования на Java ..."

========================================== 10-13-2010
Это был такой же вопрос об абстрактных классах, как и об защищенных данных. Меня разочаровывает, что в ответах акцент сместился на то, является ли сокрытие данных хорошей вещью в ООП (ответ: да). Здесь много глубины, затрагивающей природу абстрактного класса, и как он отличается от обычного не финального класса, и какие возможные преимущества могут быть для исправления имен и типов элементов данных в абстрактном родительском элементе для использования детские классы. Я думаю, что здесь есть возможность для инноваций и большего контроля, распространяющегося от абстрактного родителя к реализующим дочерним классам. Я обеспокоен тем, что общие принципы, такие как преимущества сокрытия данных, могут стать догмой и препятствовать инновациям и разработке новых моделей и идей.

Спасибо всем, кто внес свой вклад.

Ответы на вопрос(5)

Ваш ответ на вопрос