2014-12-20 4 views
0

Я читал «Мышление на Java» от Брюса Экеля в эти дни, когда приходит в главу «Контроль доступа», говорится, что если в java-файле есть два или более класса, кроме общедоступного, другие не могут быть private (что сделало бы его недоступным для любого, кроме класса) или protected.использовать private для указания контроля доступа класса

Но я видел много популярных java-библиотек, и проекты с открытым исходным кодом действительно использовали частные, чтобы украсить такие классы.

Так ли это потому, что книга слишком теоретическая или любая другая причина?

оригинальный текст (страница 231, далее издание)

Обратите внимание, что класс не может быть частным (что бы сделать его недоступным для всех, кроме класса) или защищены. Таким образом, у вас есть только два варианта для класса: пакетный доступ или открытый. Если вы не хотите, чтобы кто-либо еще имел доступ к этому классу, вы можете сделать все конструкторы частными, тем самым предотвращая любого, кроме вас, внутри статического члена класса, создавая объект этого класса.

+6

Я подозреваю, что вы просто неправильно читаете книгу. – CommonsWare

+0

Я думаю, что CommonsWare прав, в любом случае частный и защищенный могут использоваться с внутренними классами (классы внутри классов), но не могут с классами, которые не входят в какой-либо класс – niceman

+0

Книга в настоящее время довольно старая; вы должны ожидать, что он устареет. В этом коротком абзаце по сравнению с текущей Java существует несколько небезопасных решений. –

ответ

3

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

Обратите внимание, что это не уникально для файлов Java, которые объявляют более одного класса верхнего уровня. private и protected не допускаются ни в одном объявлении класса верхнего уровня.

Смежные вопросы