Почему рекомендуется объявлять переменные экземпляра как закрытые?

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

Позволять'Просто подумай об этом. Закрытые переменные не видны подклассу, поэтому, если мне нужно получить доступ или изменить переменные суперкласса в моем подклассе, я вынужден использовать некоторый метод доступа и мутаторы, такие какgetMyPrivateVariable или жеsetMyPrivateVariable, Но когда вы расширяете некоторый класс и наследуете его члены, это работает так, как если бы вы объявили их непосредственно в подклассе. Логически это означает, что у подкласса также должен быть прямой доступ к переменным экземпляра, и это дает основания для разработки класса с защищенными переменными. Я понимаю, что такая практика нарушит инкапсуляцию, но это не имеет значения в случае наследования, потому что, опять же, в этом случае все работает так, как если бы члены суперкласса были объявлены в подклассе, поэтому подкласс имеет "естественное право за возможность прямого доступа к своим членам, независимо от того, были ли они унаследованы или нет. Инкапсуляция, на мой взгляд, важнее для взаимодействия с объектом другими объектами, находящимися вне объекта ».наследственное дерево.

Итак, мой вопрос: почему все рекомендуют объявлять переменные экземпляра класса как закрытые, а не защищенные?

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

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