Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Modificador Private | Classes Avançadas
Java Avançado

bookModificador Private

Como Ocultar Campos e Métodos de Outra Classe

Modificadores de acesso são utilizados para controlar a visibilidade e acessibilidade de variáveis e métodos em Java. Eles permitem definir o escopo e restringir o acesso a determinados membros de uma classe.

Já discutimos modificadores de acesso na seção anterior. Agora, vamos analisar mais detalhadamente o modificador de acesso mais utilizado - private.

Como você sabe, com o modificador de acesso private, só é possível acessar um campo/método a partir da própria classe em que ele está localizado. Veja um exemplo de uso do modificador private:

Por exemplo, se não quisermos que uma variável em uma classe seja visível ou acessível por outra classe, podemos utilizar o modificador de acesso private:

Main.java

Main.java

copy
123456789101112131415
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.name = "Bob"; System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; }

Declaramos os campos da classe Person como private. Ao tentar inicializar o campo diretamente, ocorre um erro indicando que o campo name possui o modificador de acesso private e não está acessível para chamada ou modificação no método main.

Como Inicializar um Campo Privado

A maneira mais simples de contornar essa proteção é utilizar a inicialização por meio de um construtor. No entanto, dessa forma, só é possível inicializar os campos dos objetos, mas não acessar esses campos. Veja um exemplo:

Main.java

Main.java

copy
123456789101112131415161718
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } }

Foi possível inicializar o campo name por meio do construtor, mas ainda não é possível acessar esse campo e imprimi-lo utilizando System.out.println(). Para contornar essa limitação, é possível sobrescrever o método toString() para que, ao chamar System.out.println(bob);, sejam exibidas informações sobre seus campos. Veja um exemplo:

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }

Finalmente conseguimos exibir o valor do campo name do objeto bob. Isso foi alcançado utilizando o método sobrescrito toString(), onde implementamos a lógica para exibir o name.

Surge então a pergunta: por que precisamos desse modificador de acesso se temos que escrever tanto código extra?

Às vezes, em diferentes classes, existem variáveis com o mesmo nome, e nesses casos é necessário ocultar as variáveis dessas classes para que outras classes não tenham acesso a campos desnecessários. Isso melhora significativamente a conveniência ao escrever código, pois facilita a compreensão de qual campo pertence a qual classe.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you explain more about the different access modifiers in Java?

Why is it important to hide fields and methods from other classes?

Can you show an example of using getters and setters to access private fields?

bookModificador Private

Deslize para mostrar o menu

Como Ocultar Campos e Métodos de Outra Classe

Modificadores de acesso são utilizados para controlar a visibilidade e acessibilidade de variáveis e métodos em Java. Eles permitem definir o escopo e restringir o acesso a determinados membros de uma classe.

Já discutimos modificadores de acesso na seção anterior. Agora, vamos analisar mais detalhadamente o modificador de acesso mais utilizado - private.

Como você sabe, com o modificador de acesso private, só é possível acessar um campo/método a partir da própria classe em que ele está localizado. Veja um exemplo de uso do modificador private:

Por exemplo, se não quisermos que uma variável em uma classe seja visível ou acessível por outra classe, podemos utilizar o modificador de acesso private:

Main.java

Main.java

copy
123456789101112131415
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.name = "Bob"; System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; }

Declaramos os campos da classe Person como private. Ao tentar inicializar o campo diretamente, ocorre um erro indicando que o campo name possui o modificador de acesso private e não está acessível para chamada ou modificação no método main.

Como Inicializar um Campo Privado

A maneira mais simples de contornar essa proteção é utilizar a inicialização por meio de um construtor. No entanto, dessa forma, só é possível inicializar os campos dos objetos, mas não acessar esses campos. Veja um exemplo:

Main.java

Main.java

copy
123456789101112131415161718
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } }

Foi possível inicializar o campo name por meio do construtor, mas ainda não é possível acessar esse campo e imprimi-lo utilizando System.out.println(). Para contornar essa limitação, é possível sobrescrever o método toString() para que, ao chamar System.out.println(bob);, sejam exibidas informações sobre seus campos. Veja um exemplo:

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }

Finalmente conseguimos exibir o valor do campo name do objeto bob. Isso foi alcançado utilizando o método sobrescrito toString(), onde implementamos a lógica para exibir o name.

Surge então a pergunta: por que precisamos desse modificador de acesso se temos que escrever tanto código extra?

Às vezes, em diferentes classes, existem variáveis com o mesmo nome, e nesses casos é necessário ocultar as variáveis dessas classes para que outras classes não tenham acesso a campos desnecessários. Isso melhora significativamente a conveniência ao escrever código, pois facilita a compreensão de qual campo pertence a qual classe.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 3
some-alt