Вопрос

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

Означает ли это, что невозможно объявить поле, доступное только унаследованным классам, а не другим ненаследуемым классам в том же пакете?

Я понимаю, что есть способы обойти эту проблему, но бывают ли случаи, когда вам хотелось бы такого поведения?

Очевидно, что приведенный выше вопрос относится как к методам, так и к полям.

Большое спасибо.

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

Решение

См. http://java.sun.com/. документы / книги / учебник / Java / javaOO / accesscontrol.html
Пакет & Gt; Подклассы, вы никогда не можете иметь поле, видимое только подклассами, но не классами из того же пакета.

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

По сути:

  • частный:Доступен только классу.
  • публика:Доступен любому классу.
  • защищено:Доступен классу, всем унаследованным классам и классам текущего пакета. (отредактировано).
  • область действия не определена:Доступен всем классам текущего пакета.

Дополнительная информация здесь.

Да, защищенный доступ Java немного странен в этом смысле. Я не могу сразу понять, почему это вообще желательно. Лично меня это не беспокоит для полей , так как я все равно не люблю не приватные поля (кроме констант), но то же самое верно и для других членов.

.NET вообще не имеет понятия видимости доступа к пакету / пространству имен, но у него есть альтернатива - сборка (думаю, " jar file " - не совсем то же самое, но близко ). Честно говоря, я хотел бы иметь опции видимости и пространства имен для развертывания, но, похоже, я обречен на разочарование ...

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