Eu vi algumas referências se referirem a um modificador de acesso em Java chamado private protected
(ambas as palavras juntas):
private protected someMethod() {
}
Uma das páginas que encontrei referente a isso está aqui . A lição da minha escola também se referiu a este modificador de acesso (e disse que ele existe). No entanto, usá-lo resulta em um erro na linguagem Java.
Tentei com variáveis e métodos e tenho certeza de que não existe, mas quero uma explicação do que aconteceu. Foi considerado e depois rejeitado? Ou foi removido em uma versão mais recente do Java?
Editar: não estou procurando informações sobre a protected
palavra - chave.
private protected
modificador combinado lá.private protected
essa resposta, mas não explica o porquê ou o que aconteceu com ela, sobre o que é essa pergunta.Respostas:
Remoção do modificador de acesso
O Java tinha originalmente o
private protected
modificador, mas foi removido no JDK 1.0.2 (a primeira versão estável , o Java 1.0 que conhecemos hoje). Alguns tutoriais sobre o JDK 1.0.2 ( aqui e aqui ) dizem o seguinte:Outra resposta no SoftwareEngineering.SE afirma:
Agora dê uma olhada no histórico de versões do Java :
A partir disso, podemos concluir que os tutoriais sobre a versão 1.0.2 se referem à primeira versão, JDK 1.0, onde o idioma foi chamado Oak, mas o de SoftwareEngineering.SE se refere à primeira versão estável, o JDK 1.0.2, chamada Java. 1.0, onde foi removido.
Agora, se você tentar procurá-lo na documentação do Java 1.0 , não o encontrará, porque, como mencionado anteriormente, ele foi removido no JDK 1.0.2, também conhecido como Java 1.0. Isso é comprovado novamente quando você olha para os horários "Última modificação" do link que você postou. O link que você postou foi modificado pela última vez em fevereiro de 1996. O Java 1.0 / JDK 1.0.2, quando
private protected
foi removido, foi lançado após fevereiro de 1996 e, de acordo com a especificação, agosto de 1996.Motivo da retirada
Algumas fontes também explicam o motivo
private protected
, como este . Citar:E o SoftwareEngineering.SE também suporta isso, dizendo que não valia as inconsistências e a complexidade extra, por isso foi removido desde o início.
Interpretação
Minha interpretação de tudo isso é que talvez, nos dias de Oak, ambos pudessem coexistir (daí a combinação). Desde que
protected
o significado mudou 1 , pode ter havido uma necessidade de permissãoprivate
eprotected
ao mesmo tempo. A introdução tornou-se muito complexa e não valia a pena, e foi descartada no final. Quando o Java 1.0 / JDK 1.0.2 foi lançado, ele havia sido descartado e, portanto, não pode ser encontrado na documentação.1 Na Especificação da linguagem Oak , Seção 4.10, Acesso a variáveis e métodos , observe que o modificador padrão era
protected
:Isso é bem diferente do que temos hoje, o acesso ao pacote padrão. Isso pode ter aberto o caminho para a necessidade de
private protected
, porqueprivate
era muito restritivo eprotected
muito branda.fonte
Early on, the Java language allowed for certain combinations of modifiers,
Isso significa que havia mais do que apenas "Private Protected?"Existem histórias confusas / pouco claras:
Um, da fonte de Princeton que você colocou e também dos arquivos do MIT , afirma que:
Mas esse recurso não está especificado em nenhuma documentação oficial para Java 1.0 aqui ou aqui .
Meu palpite é que esse recurso não chegou à versão oficial 1.0, já que a especificação do idioma oficial é de agosto de 1996 e a fonte de Princeton foi modificada pela última vez em fevereiro de 1996 .
PS: vergonha no Oracle por remover os arquivos para versões mais antigas.
fonte
Como o link que você forneceu na sua pergunta sugere
private protected
foi usado em umaelement/member
classe, quando você desejasubclass
acessar o elemento, mas mantê-lo oculto de outras classespackage
.Java
se comparado aC++
tem um conceito extra de elementos de encapsulamento - e esse é um pacote . Deve-se também entender o que é acessível dentro ou fora de um pacoteJava
quando se trata desses especificadores de acesso comoprivate
,public
&protected
.Observe que expliquei por que foi usado. Não está na versão atual, é claro
fonte
Não, você não pode usar tanto
private
umprotected
conjunto. Seu tutorial é estranho. O que você tem é chamado de pacote privado ou no acesso protegido por pacotes ot6. Esse é o acesso padrão ativado quando nenhum qualificador acc6 é gravado explicitamente.fonte
O escopo privado está dentro da classe existente. Onde Protegido pode ser acessado dentro do pacote e classe estendidos por classes em outros pacotes.
Sem problemas, se você deseja que suas variáveis / métodos tenham acesso fora do pacote, você precisa definir como protegido / público, caso contrário privado ou alguns outros especificadores de acesso.
Métodos protegidos são geralmente acessíveis a partir de pacotes externos e dentro de subclasses, ou seja, uma classe precisa estender a respectiva classe para obter métodos definidos protegidos.
Métodos / variáveis particulares têm escopo dentro da classe e não podem ser acessíveis fora da classe.
Portanto, você não pode definir o Private Protected ao mesmo tempo!
fonte