Java – доступность метода внутри класса package-private?

Если у меня есть класс Java, который является закрытым для пакета (объявленным с помощью «класса», а не «общедоступного класса»), на самом деле нет никакой разницы, объявлены ли методы внутри общедоступными, защищенными или закрытыми для пакета, верно? Итак, что я должен использовать, или когда я должен использовать что? Я немного смущен.


person mk12    schedule 29.08.2009    source источник


Ответы (2)


Если у меня есть класс Java, который является закрытым для пакета (объявленным с помощью «класса», а не «общедоступного класса»), на самом деле нет никакой разницы, объявлены ли методы внутри общедоступными, защищенными или закрытыми для пакета, верно?

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

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

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

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

person Stephen C    schedule 29.08.2009
comment
Если класс final class SomeClass, то имеет ли значение видимость членов? - person kmccoy; 10.03.2011
comment
Если модификатор final будет удален в каком-то будущем рефакторинге :) Помните, что это программное обеспечение, final не означает, что он никогда не изменится, это означает, что вы не можете получить дочерний класс из этого типа, как он написан прямо сейчас. - person Greg Mattes; 11.03.2011

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

person Jeremy Powell    schedule 29.08.2009