Java - доступность метода внутри закрытого класса пакета?

Если у меня есть Java-класс, который является закрытым для пакета (объявлен с помощью "class", а не "public class"), то на самом деле нет никакой разницы, если методы внутри объявлены как public или protected или package-private, верно? Так что я должен использовать, или когда я должен использовать какой? Я немного смущен.

2 ответа

Решение

Если у меня есть Java-класс, который является закрытым для пакета (объявлен с помощью "class", а не "public class"), то на самом деле нет никакой разницы, если методы внутри объявлены как public или protected или package-private, верно?

Ну, может быть, не сразу. Но если вы затем (или в будущем) объявите "защищенный" или "публичный" класс, который наследует от закрытого пакета, тогда видимость членов исходного класса имеет значение.

Как указывает @kmccoy, объявление класса как окончательного исключает возможность подклассов.

Но это действительно только оформление витрин. Если затем вы решите, что вам действительно нужно создавать подклассы, вы просто удалите final... и тогда вы вернетесь в ситуацию, когда выбор модификаторов доступа имеет значение.

ИМО, суть в том, что вы должны выбрать наиболее подходящие модификаторы... даже если это не нужно прямо сейчас. Если ничего другого, ваш выбор модификаторов должен документировать ваше намерение относительно того, где лежат границы абстракции.

Открытые методы внутри класса пакета являются общедоступными для классов в том же пакете. Но частные методы не будут доступны для классов в одном пакете.

Другие вопросы по тегам