Я видел некоторые ссылки на модификатор доступа в Java, который называется private protected
(оба слова вместе):
private protected someMethod() {
}
Одна из найденных мной страниц, ссылающаяся на это, находится здесь . Мой школьный урок также упоминал этот модификатор доступа (и сказал, что он существует). Однако его использование приводит к ошибке в языке Java.
Я пробовал как с переменными, так и с методами, и я почти уверен, что его не существует, но я хочу объяснить, что произошло. Было ли это рассмотрено, а затем отклонено? Или это было удалено в более новой версии Java?
Изменить: я не ищу информацию о protected
ключевом слове.
private protected
модификаторе там.private protected
, но она не объясняет, почему или что с ним произошло, о чем этот вопрос.Ответы:
Удаление модификатора доступа
У Java изначально был
private protected
модификатор, но он был удален в JDK 1.0.2 (первая стабильная версия, Java 1.0, которую мы знаем сегодня). В нескольких руководствах по JDK 1.0.2 ( здесь и здесь ) говорится следующее:Другой ответ на SoftwareEngineering.SE гласит:
Теперь взгляните на историю версий Java :
Исходя из этого, мы можем заключить, что руководства по версии 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. Это еще раз подтверждается, когда вы смотрите «Время последнего изменения» для ссылки, которую вы разместили. Ссылка, которую вы разместили, была в последний раз изменена в феврале 1996 года. Java 1.0 / JDK 1.0.2, когда она
private protected
была удалена, была выпущена после февраля 1996 года и согласно спецификации, август 1996 года.Причина удаления
Некоторые источники также объясняют причину
private protected
, такую как эта . Цитировать:И SoftwareEngineering.SE также поддерживает это, заявляя, что оно не стоит несоответствий и дополнительной сложности, поэтому оно было удалено на ранней стадии.
интерпретация
Моя интерпретация всего этого заключается в том, что, возможно, еще в дни Дуба, обоим было позволено сосуществовать (отсюда и комбинация). Поскольку
protected
значение изменилось 1 , возможно, возникла необходимость в разрешенииprivate
иprotected
в то же время. Введение стало слишком сложным и не стоило того, и в итоге было отброшено. Ко времени появления Java 1.0 / JDK 1.0.2 он был удален и поэтому не может быть найден в документации.1 В спецификации языка дуба , раздел 4.10, Доступ к переменным и методам , отмечается, что модификатором по умолчанию было
protected
:Это сильно отличается от того, что мы имеем сегодня, доступ к пакету по умолчанию. Это, возможно, проложило путь для нужд
private protected
, потому чтоprivate
было слишком ограничительным иprotected
слишком мягким.источник
Early on, the Java language allowed for certain combinations of modifiers,
Означает ли это, что было нечто большее, чем «Частная защита»?Есть запутанные / неясные истории:
Во-первых, из источника в Принстоне, а также из архивов Массачусетского технологического института , говорится, что:
Но эта функция не указана ни в одной официальной документации по Java 1.0 здесь или здесь .
Я предполагаю, что эта функция не дошла до официальной версии 1.0, поскольку официальная языковая спецификация появилась в августе 1996 года, а источник в Принстоне был последний раз изменен в феврале 1996 года .
PS: позор Oracle за удаление архивов для старых версий.
источник
Как указывает ссылка, указанная вами в вашем вопросе,
private protected
она использоваласьelement/member
в классе, когда вы хотите, чтобы вашsubclass
элемент имел доступ к элементу, но скрывал его от других классовpackage
.Java
по сравнению сC++
имеет дополнительную концепцию инкапсуляции элементов - и это пакет . Следует также понимать , что доступно в пределах или за пределами пакета , вJava
когда дело доходит до этих спецификаторов доступа , какprivate
,public
иprotected
.Обратите внимание, что я объяснил, почему он был использован. Не в текущей версии, конечно
источник
Нет, вы не можете использовать оба вместе. Ваш урок странный. То, что у вас есть, это так называемый пакет private или в ot6 ссылки на защищенный доступ пакета. Это доступ по умолчанию, который включается, когда квалификатор acc6 не написан явно.
private
protected
источник
Частная сфера находится в пределах существующего класса. При этом защищенным может быть доступ внутри пакета и класс, расширенный классами в других пакетах.
Плавно, если вы хотите, чтобы ваша переменная / методы имели доступ вне пакета, вы должны определить как защищенный / общедоступный, в противном случае частный или некоторые другие спецификаторы доступа.
Защищенные методы обычно доступны из внешнего пакета и внутри подклассов, то есть класс должен расширять соответствующий класс, чтобы использовать защищенные определенные методы.
Закрытые методы / переменные имеют область видимости в классе. Они не могут быть доступны вне класса.
Следовательно, вы не можете определить частную защиту одновременно!
источник