В моем вопросе речь идет конкретно о Java, абстрактных классах и использовании защищенных данных. Мне говорят, что все данные должны быть частными, а защищенные геттеры/сеттеры используются только.
Теперь я понимаю, что мы хотим защитить данные от непосредственных манипуляций со случайными пользователями класса, и что публичные данные в целом являются сомнительной практикой. Я посмотрел "Защищенные поля Java vs public getters" (защищенные Java-поля vs public getters), но я все же сомневаюсь, что:
protected int i;
хуже в абстрактном классе, чем:
private int i;
protected int geti();
protected void seti(int j);
Я просто не вижу нисходящую сторону, когда абстрактный класс существует именно для предоставления родительского/общего объекта для классов children, а защищенная область предназначена для обеспечения доступа к детям, одновременно защищая данные от случайных пользователей. Я отмечаю в упомянутом выше вопросе, что большинство ответов, по-видимому, затрагивают вопрос о том, почему данные в целом должны быть частными, а не публичными. Я пытаюсь сосредоточить свой вопрос конкретно на данных, существующих в абстрактном родителе, предназначенном для использования детьми. Единственный разумный комментарий, который я слышал до настоящего времени, заключается в том, что использование защищенных данных родителей (например, int я выше) оставляет вас с кодом в дочернем классе, который ссылается на переменную, не объявленную в дочернем классе. Менее убедительным является аргумент (см. Общий защищенный элемент данных в базовом классе?), который вы, возможно, захотите каким-то образом изменить доступ, и теперь вы должны соблюдать свой интерфейс. Это абстрактный класс и предназначен для продления в 100% случаев.
Спасибо! Специфические заголовки/страницы # ссылки на книги гораздо полезнее, чем ссылки на "..ано базовый текст программирования Java..."
======================================== 10-13-2010
Это был вопрос об абстрактных классах, так же как и о защищенных данных. Я нахожу это разочаровывающим, что фокус, похоже, изменился в ответах на то, что скрытие данных - это хорошо в ООП (ответ: да). Здесь много глубины, затрагивающей природу абстрактного класса и то, как она отличается от обычного непредельного класса, и какие возможные преимущества могут быть для исправления имен и типов элементов данных в абстрактном родителе для использования дочерние классы. Я думаю, что здесь есть возможность для инноваций и большего контроля, распространяющегося от абстрактного родителя к реализующим дочерним классам. Я обеспокоен тем, что общие принципы, такие как преимущества скрытия данных, могут стать догмой и препятствовать инновациям и разработке новых моделей и идей.
Спасибо всем, кто внес вклад.