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

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

Ответы [ 2 ]

18 голосов
/ 29 августа 2009

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

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

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

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

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

4 голосов
/ 29 августа 2009

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

...