# Modificadores de Acesso

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1700319962659/fc451538-3daa-4f44-a40b-6ef72f85e02e.jpeg)

Nem sempre é interessante expor seus métodos e atributos para qualquer pessoa que consuma suas [classes](https://medium.com/@RafaelSermenho/conceitos-b%C3%A1sicos-de-orienta%C3%A7%C3%A3o-a-objetos-b58809b2d809#.90vv79oom), por isso existem os modificadores de acesso.

Modificadores de acesso são palavras-chave que garantem níveis de acesso aos atributos, métodos e classes.

Em Java, temos os seguintes modificadores de acesso:

*   **Private  
    **É o modificador de acesso mais restritivo que existe. Atributos e métodos declarados como *private* são acessíveis somente pela classe que os declara.   
    Em **UML**, é definido pelo símbolo “***\-***”.  
    Métodos e atributos com o modificador *private* **não são herdados.**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1700319964499/75baf5c4-5997-4031-9254-1a41aafde34b.png)

Exemplo de classe com o atributo nome usando o modificador private.

*   **Protected**  
    É um modificador de acesso um pouco mais permissivo que o *private.* Atributos e métodos declarados como *protected* são acessíveis pela classe que os declara, suas *subclasses* em outros pacotes e outras classes dentro do mesmo pacote.  
    Em **UML**, é definido pelo símbolo “**#**”.  
    Métodos e atributos declarados com o modificador *protected* numa *superclasse* devem ser definidos como *protected* ou *public* em suas *subclasses* e nunca *private.*

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1700319965623/1a8d2649-0fc6-4bce-b829-9e17579068c5.png)

Neste exemplo o método definirPeso( )é visível na subclasse “Pessoa Física” e na classe “Diretoria” que está no mesmo pacote.

*   **Public  
    **Modificador de acesso mais permissivo que existe. Atributos, métodos e classes declarados como *public* são acessíveis por qualquer classe do *Java.  
    *Em **UML**, é definido pelo símbolo “**+**”.  
    Todos os métodos e atributos declarados como *public* são herdados pelas *subclasses*.  
    Métodos e atributos declarados como *public* devem se manter *public* em todas as *subclasses*.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1700319966793/954f258f-2697-4584-8e8e-8686417a409b.png)

Neste exemplo, o método getNome() é visível por qualquer outra classe.

*   **Default  
    **Modificador de acesso padrão, usado quando nenhum for definido. Neste caso os atributos, métodos e classes são visíveis por todas as classes dentro do mesmo pacote.  
    Em **UML**, é definido pelo símbolo “**~**” (*package visibility*).

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1700319968240/a59dd080-925e-466d-a713-da9565a96c33.png)

Neste exemplo, o atributo descrição da classe “DIretoria” é visível por todas as classes dentro do mesmo pacote.

Gostou do texto? Então clique no botão Recommend, logo abaixo.  
Fazendo isso, você ajuda esta história a ser encontrada por mais pessoas. Seu comentário também é bem-vindo.

Aqui estão os links que me inspiraram e que podem lhe ajudar a descobrir um pouco mais sobre o assunto.

[**Java Access Modifiers**  
*Java provides a number of access modifiers to set access levels for classes, variables, methods and constructors. The…*www.tutorialspoint.com](http://www.tutorialspoint.com/java/java_access_modifiers.htm "http://www.tutorialspoint.com/java/java_access_modifiers.htm")[](http://www.tutorialspoint.com/java/java_access_modifiers.htm)
