Если у меня есть класс Java, который является закрытым для пакета (объявленным с помощью «класса», а не «общедоступного класса»), на самом деле нет никакой разницы, объявлены ли методы внутри общедоступными, защищенными или закрытыми для пакета, верно? Итак, что я должен использовать, или когда я должен использовать что? Я немного смущен.
Java – доступность метода внутри класса package-private?
Ответы (2)
Если у меня есть класс Java, который является закрытым для пакета (объявленным с помощью «класса», а не «общедоступного класса»), на самом деле нет никакой разницы, объявлены ли методы внутри общедоступными, защищенными или закрытыми для пакета, верно?
Ну может не сразу. Но если вы затем (или в будущем) объявите «защищенный» или «общедоступный» класс, который наследуется от класса package-private, то видимость членов исходного класса имеет значение.
Как указывает @kmccoy, объявление класса окончательным исключает возможность существования подклассов.
Но на самом деле это только показуха. Если вы затем решите, что вам действительно нужно создавать подклассы, вы просто удалите final
... и тогда вы вернетесь в ситуацию, когда выбор модификаторов доступа действительно имеет значение.
ИМО, суть в том, что вы должны выбрать наиболее подходящие модификаторы... даже если в данный момент в этом нет необходимости. По крайней мере, ваш выбор модификаторов должен документировать ваше намерение относительно того, где лежат границы абстракции.
final class SomeClass
, то имеет ли значение видимость членов?
- person kmccoy; 10.03.2011
Публичные методы внутри класса пакета являются общедоступными для классов в том же пакете. Но закрытые методы не будут доступны классам в том же пакете.