Начнем с другого поведения: даже если вы объявите метод/переменную приватным, другой экземпляр того же класса может получить к нему доступ. Это нормально, я могу жить с этим. Я называю это class-private, а не private-instance.В Java почему метод суперкласса не может получить доступ к защищенным или приватным методам/переменным из экземпляра подкласса?
Теперь вопрос части: Например, во время выполнения, я хочу, чтобы иметь возможность проверить, что все переменные строк в this
классе не ноль, и если они равны нулю, они должны быть изменены на строку «NULL».
Я могу использовать переменные, используя отражение, и получать их значения. Но если я продлю свой класс и добавлю частные или даже защищенные переменные, мой базовый класс не сможет получить к ним доступ. Я должен указать setAccessible
на переменные, прежде чем я смогу их использовать.
Так что, пожалуйста, объясните мне, почему базовый класс (суперкласс) не может получить доступ к закрытым/защищенным переменным из своего подкласса. Это его подкласс, поэтому я его не понимаю. Какова идея этого?
Я знаю, что суперкласс не должен знать о своих подклассах, но в моем примере это имеет смысл, нет?
Это потому, что я не могу или не должен ограничивать свои подклассы таким образом?
Update: Исходя из ответов, я хочу знать также: Почему не обращается к закрытым переменным другого экземпляра из того же класса считается нарушением инкапсуляции?
нет, это не имеет смысла. –