Доступность переменной экземпляра Java [дубликат]
-
06-07-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
В чем разница в доступности следующих переменных в Java?
public class Joe {
public int a;
protected int b;
private int b;
int c;
}
Меня больше всего интересует, что делает последний.
Решение
- публичный:доступен для чтения / записи для всех
- защищенный:доступно для чтения / записи экземпляры подклассов и изнутри прилагаемой упаковки
- Частное:доступно для чтения / записи для Любой экземпляр класса и внутренний или внешний (заключающий) экземпляр
- int c :пакет -частный, доступный для чтения / записи все классы внутри одного пакета
Смотрите на JLS для получения более подробной информации
Редактировать:Добавлен комментарий для protected, в котором говорится, что доступ предоставляется из того же пакета, вы, ребята, абсолютно правы.Также добавлен комментарий для личных.Теперь я вспомнил...;-)
Другие советы
Извините, что отвечаю на исправления к одному предыдущему ответу, но у меня недостаточно репутации, чтобы вносить изменения напрямую...
- общедоступный - доступен для чтения / записи для всех
- защищенный - доступен для чтения / записи экземпляры, подклассы и все классы внутри одного пакета
- int c :пакет-частный, доступный для чтения / записи для всех классов внутри тот же пакет
- private - доступен для чтения / записи для любого члена самого этого класса и внутренних классов (если таковые имеются)
Лучше упорядочить модификаторы доступа таким образом, от самого широкого доступа (public) к самому узкому доступу (private), зная, что при переходе от узкого доступа к широкому вы не теряете никаких возможностей.
Это особенно важно для "защищенных", где часто неправильно понимают, что классы в одном пакете могут также получать доступ к защищенным членам класса (а не только к его подклассам).
Я стараюсь полностью избегать доступа на уровне пакета (последний доступ, который вы упоминаете).
Мне нравится, чтобы занятия были автономными.Если другому классу нужен доступ к чему-то в моем классе, это должно быть общедоступно (и это должно быть с помощью метода, а не атрибута).В противном случае я чувствую, что ты сломался инкапсуляция, как объяснено в Абстракция ПРОТИВ Сокрытия информации ПРОТИВ Инкапсуляции.
И все это - средства защиты во время компиляции, их можно легко переопределить с помощью отражения во время выполнения.