Уровни доступа членов класса Java
-
19-08-2019 - |
Вопрос
Я понимаю, что это очень простой вопрос, но он всегда меня беспокоил.Насколько я понимаю, если вы объявите поле частным в Java, оно не будет видно за пределами этого класса.Если он защищен, то он доступен унаследованным классам и чему-либо в том же пакете (поправьте меня, если какое-либо из этих определений неверно).
Означает ли это, что невозможно объявить поле, доступное только унаследованным классам, а не другим ненаследуемым классам в том же пакете?
Я понимаю, что есть способы обойти эту проблему, но бывают ли случаи, когда вам хотелось бы такого поведения?
Очевидно, что приведенный выше вопрос относится как к методам, так и к полям.
Большое спасибо.
Решение
См. http://java.sun.com/. документы / книги / учебник / Java / javaOO / accesscontrol.html
Пакет & Gt; Подклассы, вы никогда не можете иметь поле, видимое только подклассами, но не классами из того же пакета.
Другие советы
По сути:
- частный:Доступен только классу.
- публика:Доступен любому классу.
- защищено:Доступен классу, всем унаследованным классам и классам текущего пакета. (отредактировано).
- область действия не определена:Доступен всем классам текущего пакета.
Дополнительная информация здесь.
Да, защищенный доступ Java немного странен в этом смысле. Я не могу сразу понять, почему это вообще желательно. Лично меня это не беспокоит для полей , так как я все равно не люблю не приватные поля (кроме констант), но то же самое верно и для других членов.
.NET вообще не имеет понятия видимости доступа к пакету / пространству имен, но у него есть альтернатива - сборка (думаю, " jar file " - не совсем то же самое, но близко ). Честно говоря, я хотел бы иметь опции видимости и пространства имен для развертывания, но, похоже, я обречен на разочарование ...