Давайте начнем с другого поведения: даже если вы объявите метод / переменную как private, другой экземпляр того же класса может получить к нему доступ. Это нормально, я могу жить с этим. Я называю эти классы частными, а не частными экземплярами.
Теперь часть вопроса:
Например, во время выполнения я хочу иметь возможность проверить, что все переменные String в классе this
не равны NULL, и если они равны NULL, их следует заменить на строку «NULL».
Я могу пробежаться по переменным с помощью отражения и получить их значения. Но если я расширю свой класс и добавлю приватные или даже защищенные переменные, мой базовый класс не сможет получить к ним доступ. Мне нужно setAccessible
для переменных, прежде чем я смогу их использовать.
Поэтому, пожалуйста, объясните мне, почему базовый класс (суперкласс) не может получить доступ к закрытым / защищенным переменным из своего подкласса. Это его подкласс, поэтому я не понимаю. Что за идея стоит за этим?
Я знаю, что суперкласс не должен знать о своих подклассах, но в моем примере это имеет смысл, нет?
Это потому, что я не могу или не должен ограничивать свои подклассы таким образом?
Обновление:
Основываясь на ответах, я хочу знать также: почему доступ к закрытым переменным другого экземпляра из того же класса не считается нарушением инкапсуляции?