Estou um pouco confuso com o termo "pacote privado" que algumas documentações usam, junto com o uso de "acesso padrão". O acesso privado ao pacote e o acesso padrão não são sinônimos de protegido?
java
terminology
protected
access-modifiers
package-private
TurtleToes
fonte
fonte
default
modificador na frente dos métodos (de interface). Mas isso não é um modificador de acesso! Todos os modificadores de acesso e seus escopos são visualizados claramente nesta tabela .Respostas:
Sim, é quase o mesmo. O modificador protegido especifica que o membro só pode ser acessado dentro de seu próprio pacote (como com package-private) e, além disso , por uma subclasse de sua classe em outro pacote.
fonte
public static final
, para um método épublic abstract
, para um enum ou anotação épublic
e para uma classe épublic static
O modificador de acesso "padrão" (aquele em que nenhum deles é explicitamente fornecido) é "package-private", o que significa que apenas coisas no mesmo pacote podem acessá-los. No entanto, estar no mesmo pacote não implica nada sobre o relacionamento de herança entre as classes - é puramente uma convenção de nomenclatura.
"Protegido" significa que não apenas as classes no mesmo pacote, mas também as subclasses (independentemente do pacote em que essas subclasses estejam) poderão acessá-lo.
fonte
O acesso padrão para classes é privado de pacote, entretanto o acesso padrão para membros da interface é público.
por exemplo
As regras de acesso padrão para interfaces não são as mesmas que para classes.
fonte
Acesso privado de pacote e acesso padrão são sinônimos. Um objeto também pode acessar membros protegidos dos objetos cujas classes estão no mesmo pacote. Um objeto também pode acessar membros protegidos de suas superclasses sem uma condição sobre seu pacote. Como um exemplo concreto:
fonte
'Pacote privado' e acesso padrão são os mesmos. Em versões anteriores do compilador por volta de 1.1.2 / 3, 'pacote' era um modificador permitido, mas ignorado, significando o mesmo que nenhum modificador, ou seja, 'pacote privado'. Pouco depois, houve uma moda passageira de colocar
/*package*/
(como um comentário) em tais situações. Da mesma forma, naquela época, você poderia declarar coisas como classes sincronizadas, embora novamente não houvesse nenhum efeito semântico real.Nenhum deles é o mesmo que 'protegido', que se estende a classes derivadas em outros pacotes.
fonte
Da especificação da linguagem Java
fonte
default e package-private são os mesmos, o que significa que podem ser usados por qualquer classe até que estejam no mesmo pacote.
O termo pacote-privado , na verdade, é denominado pelo significado de modificador privado como privado significa que ele está disponível apenas na mesma classe e nenhuma outra classe ou subclasse pode acessá-lo dentro do mesmo pacote ou sem.
Portanto, pacote privado significa o mesmo que padrão .
fonte