Carregando...

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.

Gate with private code

java
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.

Pier calls show

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();.

Pier shows two gates

java
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

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

❓
5
Perguntas
🎯
70%
Para Passar
♾️
∞
Tempo
🔄
∞
Tentativas

📝 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