публичный или ничего - PullRequest
       50

публичный или ничего

1 голос
/ 22 февраля 2012

В java, действительно ли мы должны делать это, чтобы наша переменная или метод были публичными?Например:

void aaa() {
...
}

или

public void aaa() {
...
}

Если это необходимо, почему?

Ответы [ 7 ]

12 голосов
/ 22 февраля 2012

Ну, это не переменная, это метод - но да, вы должны сделать это, чтобы сделать метод публичным.Если вы этого не сделаете, он по умолчанию имеет доступ к пакету и не будет доступен из других пакетов.Вы должны решить для себя, должен ли какой-либо конкретный метод, который вы пишете, быть доступным только в пределах одного и того же класса (сделать его private) для подклассов (сделать его protected) для пакета (оставить значение по умолчанию; вы не можете указать пакетдоступ явно, к сожалению) или ко всему (сделайте это public).

(Это небольшое упрощение модификаторов доступа, но это начало.)

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

6 голосов
/ 22 февраля 2012

You can ommmit access level keyword

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

5 голосов
/ 22 февраля 2012

Отсутствие модификатора на самом деле отличается от public, private или protected.

Без модификатора, только сам класс и любой класс в том жепакет может получить доступ к атрибуту.

Подробнее здесь: В Java разница между стандартным, общедоступным, защищенным и частным

1 голос
/ 22 февраля 2012

Два метода различны: первый имеет видимость пакета, а второй общедоступный.

Разница в том, что видимые для пакета методы кажутся открытыми только для методов внутри одного пакета, в то время как открытые методы видны всем методам внутри и снаружи пакета.

Таким образом, ответ на ваш вопрос зависит от ваших намерений: если ваш метод действительно является частью интерфейса вашего компонента, сделайте его закрытым; если он предназначен для использования только внутри пакета, сохраняйте его в видимости пакета по умолчанию.

0 голосов
/ 22 февраля 2012

Я думаю, это предполагает общедоступность в Java, так что это на самом деле не требуется. Если вы начинаете добавлять public, protected и private в микс в одном классе, легче увидеть, что область действия метода может иметь.

0 голосов
/ 22 февраля 2012

По умолчанию это закрытый пакет.

Если вам нужен public или что-то еще, вы должны указать его.

Метод может быть доступен для самого класса, других классов в том же пакете,но не за пределами пакета и не по подклассам.

См. таблицу внизу:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

0 голосов
/ 22 февраля 2012

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

...