У Java действительно был модификатор private protected
, но он был удален в JDK 1.0.2 (первая стабильная версия, Java 1.0, которую мы знаем сегодня). Несколько руководств по JDK 1.0.2 ( здесь и здесь ) говорят следующее:
Примечание: выпуск 1.0 языка Java поддерживает пять уровней доступа: четыре перечисленные выше плюс
blockquote>private protected
. Уровень доступаprivate protected
не поддерживается в версиях Java выше 1.0; вы больше не должны использовать его в своих программах Java.Другой ответ на SoftwareEngineering.SE указывает:
Java изначально имел такой модификатор. Это было написано
blockquote>private protected
, но удалено в Java 1.0.Теперь взгляните на историю версий Java :
JDK 1.0
Первая версия была выпущена 23 января 1996 года и называется Oak. Первая стабильная версия JDK 1.0.2 называется Java 1.
blockquote>. Из этого можно заключить, что учебники по версии 1.0.2 относятся к самой первой версии JDK 1.0, где язык был назван Oak, но один из SoftwareEngineering.SE относится к первой стабильной версии JDK 1.0.2, называемой Java 1.0, где она была удалена.
Теперь, если вы попытаетесь найти его в документации по Java 1.0 , вы не найдете его, потому что, как упоминалось ранее, он был удален в JDK 1.0.2, иначе известный как Java 1.0. Это снова подтверждается, когда вы просматриваете «Last Modified» раз для ссылки, которую вы опубликовали. Ссылка, которую вы опубликовали, была в последний раз изменена в феврале 1996 года. Java 1.0 / JDK 1.0.2, когда
private protected
был удален, был выпущен после февраля 1996 года , и согласно спецификации, август 1996 года .Причина удаления
Некоторые источники также объясняют причину
private protected
, такую как этот . Процитировать:Что было защищено частным образом?
В начале Java-язык допускал определенные комбинации модификаторов, один из которых был
private protected
. Смыслprivate protected
заключался в том, чтобы ограничить видимость строго подклассами (и удалить доступ к пакетам). Позднее это было сочтено несколько непоследовательным и чрезмерно сложным и больше не поддерживается. [5][5] Значение модификатора
blockquote>protected
изменилось в версии Beta2 Java и комбинацииprivate protected
появился в то же время. Они исправили некоторые потенциальные дыры в безопасности, но смутили многих людей.И SoftwareEngineering.SE также поддерживает это, говоря, что это не стоило несоответствий и дополнительной сложности, поэтому он был удален Раннее.
Интерпретация
Моя интерпретация всего этого заключается в том, что, возможно, еще в дубовые дни оба были допущены к сосуществованию (отсюда и комбинация). Поскольку значение
protected
было изменено1, возможно, было необходимо одновременно разрешитьprivate
иprotected
. Введение стало слишком сложным и не стоило того, и, таким образом, оно упало в конце. К тому времени, когда развернулась Java 1.0 / JDK 1.0.2, она была удалена и, следовательно, не может быть найдена в документации.
1В спецификации Oak Language Specification , раздел 4.10, «Доступ к переменным и методам», отмечается, что модификатор по умолчанию был
protected
:По умолчанию все переменные и методы в классе защищены.
blockquote>Это сильно отличается от того, что у нас есть сегодня, для доступа по умолчанию. Возможно, это проложило путь к необходимости
private protected
, потому чтоprivate
был слишком ограничительным, аprotected
был слишком снисходительным.
Нет, вы не можете использовать оба private
a protected
вместе. Ваш урок странный. То, что у вас есть, называется так называемым пакетом private или in ot6. Это доступ по умолчанию, который активируется, если не указано явно спецификатор acc6.
Поскольку ссылка, указанная в вашем вопросе, предполагает, что private protected
использовался в element/member
класса, когда вы хотите, чтобы ваш subclass
имел возможность доступа к элементу, но сохранял его скрытым от других классов в своем package
.
Java
по сравнению с C++
имеет дополнительную концепцию инкапсулирующих элементов - и это пакет. Также следует понимать, что доступно внутри или вне пакета в Java
, когда дело доходит до этих спецификаторов доступа, таких как private
, public
& amp; protected
.
Обратите внимание, что я объяснил, почему он был использован. Не в текущей версии курса
Есть путающие / непонятные истории:
Один из источника Принстона, который вы положили, а также из архивов MIT , утверждает, что:
Примечание. Версия 1.0 языка Java поддерживает пять уровней доступа: четыре перечисленные выше плюс частные защищенные. Уровень закрытого защищенного доступа не поддерживается в версиях Java выше 1.0; вы больше не должны использовать его в своих программах Java.
blockquote>Но эта функция не указана в официальной документации для Java 1.0 здесь или здесь .
Я предполагаю, что эта функция не попала в официальную версию 1.0, так как официальная спецификация языка - с августа 1996 года, а источник в Принстоне в последний раз был изменен в феврале 1996 года .
PS: стыдно за Oracle для удаления архивов для более старых версий.
Частная область с существующим классом. В Protected может быть доступ к пакетам и классам, расширенным классами в других пакетах.
Плавно, если вы хотите, чтобы ваши переменные / методы были доступны за пределами пакета, вам необходимо определить как защищенные / публичные, иначе частные или некоторые другие спецификаторы доступа.
Защищенные методы обычно доступны из внешнего пакета и внутри подклассов, то есть класс должен расширять соответствующий класс, чтобы использовать защищенные определенные методы.
Частные методы / переменные имеют в пределах класса. Они не могут быть доступны вне класса.
Следовательно, вы не можете определить Private Protected в одно и то же время!
Early on, the Java language allowed for certain combinations of modifiers,
Означает ли это, что было больше, чем просто «Private Protected? & quot; – XaolingBao 4 January 2017 в 14:30