Acesso em Java
Escreva uma classe Gate em Gate.java com um campo private int chamado code, um construtor Gate(int n) que faz code = n;, e um método void show() que imprime code. Em Pier.java, construa um gate com Gate g = new Gate(9);, depois chame g.show();. Compile ambos os ficheiros e execute java Pier. O ecrã deve mostrar uma linha: 9. O campo fica escondido de Pier. O método em Gate ainda o pode ler. Pôr private no campo é o que esta página ensina.
Um campo que Pier não deve nomear diretamente
Até agora outras classes na mesma pasta podiam muitas vezes chegar a campos como j.fill ou t.size quando esses campos não tinham palavra de acesso. A palavra private muda isso. Um campo private pertence à classe que o declara. Métodos dentro dessa mesma classe podem usar o campo. Uma classe diferente — aqui Pier — não deve escrever g.code.
Crie Gate.java primeiro. A linha public class é public class Gate. Não deixe um nome de classe antigo Tag ou Jar aqui. Dentro das chavetas declare private int code;. Escreva o construtor Gate(int n) { code = n; } com nomes diferentes para esta página não precisar de this. Depois escreva:
void show() { System.out.println(code); }
Não há main em Gate.java. Guarde antes de compilar. O método show fica na mesma classe que code, por isso pode ler o campo private. Esse é o caminho permitido nesta página.
public class Gate {
private int code;
Gate(int n) {
code = n;
}
void show() {
System.out.println(code);
}
}
Pier chama show, não g.code
Crie Pier.java na mesma pasta. A linha public class é public class Pier. Dentro de main, escreva Gate g = new Gate(9); depois g.show();. Não escreva System.out.println(g.code); nesta página. Se você ler g.code a partir de Pier enquanto code é private, javac recusa.
Mantenha Pier como a classe que tem main. Não coloque main dentro de Gate nesta lição. Se um ficheiro Yard restante da página static ainda está na pasta, não execute java Yard nesta lição — execute java Pier depois de compilar Gate.java e Pier.java.
public class Pier {
public static void main(String[] args) {
Gate g = new Gate(9);
g.show();
}
}
Da pasta que guarda ambos os ficheiros, execute javac Gate.java Pier.java. Você pode compilar Gate.java primeiro e Pier.java em seguida quando ambos estiverem completos. Quando parênteses, chavetas e ponto e vírgula coincidem, javac não escreve linha própria. Depois execute java Pier — não java Pier.java, e não java Gate. Tire o final .java do comando de execução. Arranque a classe que tem main. Os mesmos comandos funcionam no Windows e no macOS.
O programa deve imprimir uma linha e parar: 9. Não deve pedir que você digite. Se o terminal esperar entrada do teclado, uma chamada nextLine de um exercício antigo ainda está num ficheiro. Apague essa chamada e mantenha new Gate(9) mais g.show(); em Pier, com private int code em Gate.
Percorra a execução uma vez. A Java começa em Pier.main. A expressão new Gate(9) constrói um gate e guarda 9 em code dentro do construtor. A chamada g.show() entra em show nesse mesmo objeto. Dentro de Gate, show pode ler code e imprime 9. Pier nunca nomeou o campo. O ecrã mostra 9.
Se você escrever System.out.println(g.code); em Pier em vez de g.show();, javac para com um erro de acesso enquanto code é private. Essa recusa é o ponto desta página. Ponha g.show(); de volta.
Comparado com static e com campos abertos
Na página static você chamava Tag.ping(); sem campo escondido. Isso ainda funciona. Esta página esconde um campo e deixa um método aberto. Um demo restante Tag.ping(); é outra lição. Para esta página mantenha Gate e Pier e g.show();.
Páginas anteriores muitas vezes deixavam campos sem private, por isso j.fill a partir de outra classe compilava. Essa forma mais solta ainda aparece em demos pequenos. Esta lição escolhe private de propósito para você ver a fronteira. Imprimir só g com System.out.println(g); não mostra um 9 limpo. Chame g.show(); ou imprima através de um método que a classe permite.
Dois gates, dois codes
Cada new Gate(...) guarda o seu próprio code private. Você pode escrever Gate a = new Gate(2); e Gate b = new Gate(8);, depois chamar a.show(); e b.show();.
public class Pier {
public static void main(String[] args) {
Gate a = new Gate(2);
Gate b = new Gate(8);
a.show();
b.show();
}
}
Compile e execute de novo: javac Gate.java Pier.java, depois java Pier. O ecrã deve mostrar 2 numa linha e 8 na seguinte. Cada chamada show correu no seu próprio objeto e leu o campo private desse objeto. Escrever Gate b = a; não constrói um segundo objeto — use duas chamadas new Gate(...) quando quiser dois codes.
Se ambas as linhas mostrarem o mesmo número, verifique que cada new passa um argumento diferente. Se javac se queixar de code em Pier, você ainda tem uma linha direta g.code — remova-a e mantenha show.
O que isto deixa para packages
Esta página mantém ambos os ficheiros na mesma pasta com o layout de pacote predefinido. Uma página mais tarde — packages — coloca classes em pastas nomeadas com linhas package. Fique aqui com private e show. Não invente um quadro completo public/protected nesta página; o objetivo da lição é um campo private e um método que ainda o pode ler.
Se javac não encontrar Gate ao compilar Pier.java, verifique que Gate.java está na mesma pasta e que a linha da classe é public class Gate. Quando a pasta ainda guarda Tag.java ou Yard.java, deixe-os ou apague-os só se confundirem o seu comando de compilação. Execute java Pier depois de compilar o par Gate e Pier desta lição.
Antes de packages
Você pode declarar private int code;, escrever Gate(int n) { code = n; } e void show() { System.out.println(code); }, e a partir de Pier executar Gate g = new Gate(9); depois g.show();. Compile ambos os ficheiros e execute java Pier. O ecrã mostra 9. O campo private ficou dentro de Gate. O método da mesma classe imprimiu-o. A página seguinte é packages, onde você coloca classes em pastas de pacote nomeadas.
Mantenha private no campo. Mantenha a impressão dentro de show, não como g.code a partir de Pier. Mantenha main em Pier. Esses três hábitos são o ponto de controlo desta página antes de avançar. Quando o ecrã mostra 9 através de show, você atravessou a fronteira de acesso como esta lição pretende.
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo