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

#java #inheritance #access-modifiers

#java #наследование #модификаторы доступа

Вопрос:

В Java у меня есть абстрактный класс с реализованным методом (не абстрактным), который я хочу сделать доступным для других классов, которые его расширяют, но не для всех остальных в пакете..

Я думаю, что это невозможно, потому что private сохраняет его закрытым, public и protected слишком сильно его раскрывают..

Как бы вы подошли к проблеме? Повторная реализация одного и того же метода во всех расширенных классах не обсуждается.. есть ли способ получить доступ к родительским методам?

Спасибо!

Ответ №1:

Если вы хотите, чтобы метод был доступен для всего, что расширяет класс, тогда protected — это нужный вам модификатор. Для этого он и предназначен.

Ответ №2:

but not by everyone else in the package.. Это невозможно. Вы можете использовать protected access, чтобы разрешить доступ для подклассов, но это также будет включать доступ для каждого класса в одном пакете.

Ответ №3:

Используйте protected и создайте пакет, содержащий только абстрактный класс и его подклассы. Не помещайте в этот пакет никакие другие классы, которые не должны иметь доступа к защищенным методам.

Если вас беспокоит то, что кто-то другой может создать новый класс в этом пакете и начать доступ к защищенным методам, на самом деле не существует языковой конструкции, предотвращающей это. Вы должны либо доверять другим разработчикам, либо пройти строгий процесс экспертной оценки.

Комментарии:

1. Если метод защищен, вам не нужно помещать подклассы в один пакет…

2. @pgras Это верно, но рекомендуется хранить их либо в одном пакете, либо в подпакете, чтобы избежать циклических зависимостей между пакетами.