freeCodeCamp/guide/portuguese/java/access-modifiers/index.md

123 lines
6.7 KiB
Markdown
Raw Normal View History

---
title: Access Modifiers
localeTitle: Modificadores de Acesso
---
# Modificadores de Acesso
Você já quis definir como as pessoas acessariam algumas de suas propriedades? Você não iria querer que ninguém usasse sua cueca. No entanto, seus amigos próximos e parentes podem usar seu suéter e talvez seu carro.
Da mesma forma que você define um nível de acesso às suas posições, o Java também controla o acesso. Você deseja definir o nível de acesso para variáveis, métodos e classes, dependendo de quais outras classes você deseja acessá-las.
Java fornece 4 níveis de modificadores de acesso. Isso significa que você pode modificar o acesso a uma variável, método ou classe de 4 maneiras. Essas 4 formas são privadas, públicas, protegidas e padrão.
Estes modificadores de acesso podem ser aplicados a campos, métodos e classes (as Classes são um caso especial, nós as veremos no final deste artigo). Aqui está uma visão geral 1 do que são os `Access Levels` para cada `Access Modifier` :
#### Referência da Tabela de Modificadores de Acesso:
![Tabela de modificadores de acesso](https://i.imgur.com/zoMspyn.png)
#### Modificador de Acesso Privado
Permite que uma variável ou método seja acessado somente na classe em que foi criada. Nenhuma outra classe além da classe que criou a variável ou método pode acessá-la. Isso é muito semelhante aos seus órgãos internos. Eles só são acessíveis ao proprietário. Para tornar uma variável ou método privado, basta anexar a palavra-chave privada antes da variável ou do tipo de método. Vamos usar privado em um exemplo de codificação. Se um banco quiser fornecer uma taxa de juros de 10% sobre seus empréstimos, ele garantiria que a variável de taxa de juros (suponhamos `int int_rate;` ) permanecesse privada, de modo que nenhuma outra classe tentaria acessá-lo e alterá-lo. Por exemplo;
`private String name;`
O exemplo acima cria uma variável chamada nome e garante que ela seja acessível somente dentro da classe a partir da qual foi criada.
Outro exemplo para um método é `java private void setAge(){ System.out.println("Set Age"); }` O exemplo acima garante que o método setAge seja acessível somente dentro da classe da qual foi criado e em nenhum outro lugar.
#### Modificador de Acesso Público
O modificador de acesso público é o oposto direto do modificador de acesso privado. Uma classe, método ou variável pode ser declarada como pública e significa que é acessível de qualquer classe. O modificador de acesso público pode ser comparado a uma escola pública onde qualquer pessoa pode procurar admissão e ser admitida.
Uma classe, método ou variável pública pode ser acessada de qualquer outra classe a qualquer momento.
Por exemplo, para declarar uma classe como pública, tudo o que você precisa é:
```java
public class Animal{
}
```
Como tal, a classe Animal pode ser acessada por qualquer outra classe.
```java
public int age;
public int getAge(){
}
```
Acima estão as maneiras de especificar uma variável e um método como público.
#### O modificador de acesso padrão
O modificador de acesso padrão é diferente de todos os outros modificadores de acesso, pois não possui uma palavra-chave. Para usar o modificador de acesso padrão, você simplesmente não usa nenhum dos outros modificadores de acesso e isso significa simplesmente que você está usando um modificador de acesso padrão.
Por exemplo, para usar o modificador de acesso padrão para uma classe, você usa
```java
class Bird{
}
```
Isso basicamente significa que você está usando o modificador de acesso padrão. O modificador de acesso padrão permite que uma variável, método ou classe seja acessível por outras classes dentro do mesmo pacote. Um pacote é uma coleção de classes relacionadas em um diretório de arquivos. Para mais informações sobre pacotes, confira a seção sobre pacotes.
Qualquer variável, método ou classe declarada para usar o modificador de acesso padrão não pode ser acessada por nenhuma outra classe fora do pacote do qual ela foi declarada.
```java
int age;
void setNewAge(){
}
```
Acima estão algumas maneiras de usar o modificador de acesso padrão para uma variável ou método. Não se esqueça de que o modificador de acesso padrão não possui uma palavra-chave. A ausência dos outros 3 modificadores de acesso significa que você está usando o modificador de acesso padrão.
#### Modificador de Acesso Protegido
O modificador de acesso protegido está intimamente relacionado ao modificador de acesso padrão. O modificador de acesso protegido tem as propriedades do modificador de acesso padrão, mas com uma pequena melhoria.
Uma variável e um método são os únicos a usar o modificador de acesso protegido. A pequena melhoria é que uma classe fora do pacote de classes a partir da qual a variável ou método foi declarado pode acessar a referida variável ou método. Isso é possível somente se ele herda da classe, no entanto.
A classe de outro pacote que pode ver variáveis ou métodos protegidos deve ter estendido a classe que criou as variáveis ou métodos.
Nota sem a vantagem da Herança, um modificador de acesso padrão tem exatamente o mesmo acesso que um modificador de acesso protegido.
Exemplos de uso do modificador de acesso protegido são mostrados abaixo:
```java
protected int age;
protected String getName(){
return "My Name is You";
}
```
#### Modificadores de Acesso em Classes
Por padrão, as classes podem ter apenas dois modificadores:
* público
* sem modificador (modificador padrão)
Então isso significa que as classes nunca podem ser definidas como `private` ou `protected` ?
Isso é lógico, por que você quer fazer uma aula particular? Nenhuma outra classe seria capaz de usá-lo. Mas às vezes, você pode incorporar uma turma em outra turma. Essas classes especiais, classes `inner classes` , podem ser definidas como privadas ou protegidas para que somente a classe que as rodeia possa acessá-las:
```java
public class Car {
private String brand;
private Engine engine;
// ...
private class Engine {
// ...
}
}
```
No exemplo acima, somente a classe `Car` pode usar a classe `Engine` . Isso pode ser útil em alguns casos.
Outras classes nunca podem ser definidas como `protected` ou `private` , porque não faz sentido. O modificador de acesso `protected` é usado para tornar as coisas do `package-private` mas com a opção de serem acessíveis às subclasses. Não há conceito como 'subpackages' ou 'package-inheritance' em java.
### Fontes
[1\. Documentos do Oracle sobre Modificadores de Acesso](https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html "Oracle Docs")