В чем разница в доступности следующих переменных в Java?
public class Joe {
public int a;
protected int b;
private int b;
int c;
}
Меня больше всего интересует то, что делает последний.
В чем разница в доступности следующих переменных в Java?
public class Joe {
public int a;
protected int b;
private int b;
int c;
}
Меня больше всего интересует то, что делает последний.
Подробнее см. JLS
EDIT: добавлен комментарий для защищенных, в котором говорится, что доступ предоставляется из одного и того же пакета, вы, парни, совершенно правы. Также добавлен комментарий для частного. Я помню сейчас...; -)
Извините за ответные исправления на один предыдущий ответ, но у меня нет достаточной репутации для непосредственного изменения...
Лучше заказать модификаторы доступа таким образом, от самого широкого доступа (общедоступного) до самого узкого (частного), зная, что при переходе от узкого к широкому вы не теряете никаких возможностей.
Это особенно важно для "защищенных", где часто неправильно понимают, что классы в одном пакете также могут обращаться к защищенным членам класса (а не только к его подклассам).
Я пытаюсь полностью избежать доступа к уровню пакета (последний доступ к вам).
Мне нравится держать классы автономными. Если другому классу нужен доступ к чему-то в моем классе, он должен быть общедоступным (и должен быть методом, а не атрибутом). В противном случае я чувствую, что вы нарушили encapsulation, как описано в Абстракция VS Информация, скрывающая VS-инкапсуляцию.
И все это защита времени компиляции, они могут быть легко переопределены через отражение во время выполнения.