Вопрос

В чем разница в доступности следующих переменных в Java?

public class Joe {
    public int a;
    protected int b;
    private int b;
    int c;
}

Меня больше всего интересует, что делает последний.

Это было полезно?

Решение

  • публичный:доступен для чтения / записи для всех
  • защищенный:доступно для чтения / записи экземпляры подклассов и изнутри прилагаемой упаковки
  • Частное:доступно для чтения / записи для Любой экземпляр класса и внутренний или внешний (заключающий) экземпляр
  • int c :пакет -частный, доступный для чтения / записи все классы внутри одного пакета

Смотрите на JLS для получения более подробной информации

Редактировать:Добавлен комментарий для protected, в котором говорится, что доступ предоставляется из того же пакета, вы, ребята, абсолютно правы.Также добавлен комментарий для личных.Теперь я вспомнил...;-)

Другие советы

Извините, что отвечаю на исправления к одному предыдущему ответу, но у меня недостаточно репутации, чтобы вносить изменения напрямую...

  • общедоступный - доступен для чтения / записи для всех
  • защищенный - доступен для чтения / записи экземпляры, подклассы и все классы внутри одного пакета
  • int c :пакет-частный, доступный для чтения / записи для всех классов внутри тот же пакет
  • private - доступен для чтения / записи для любого члена самого этого класса и внутренних классов (если таковые имеются)

Лучше упорядочить модификаторы доступа таким образом, от самого широкого доступа (public) к самому узкому доступу (private), зная, что при переходе от узкого доступа к широкому вы не теряете никаких возможностей.

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

Я стараюсь полностью избегать доступа на уровне пакета (последний доступ, который вы упоминаете).

Мне нравится, чтобы занятия были автономными.Если другому классу нужен доступ к чему-то в моем классе, это должно быть общедоступно (и это должно быть с помощью метода, а не атрибута).В противном случае я чувствую, что ты сломался инкапсуляция, как объяснено в Абстракция ПРОТИВ Сокрытия информации ПРОТИВ Инкапсуляции.

И все это - средства защиты во время компиляции, их можно легко переопределить с помощью отражения во время выполнения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top