Conteúdo do Curso
Java Avançado
Java Avançado
Modificador 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
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
. Quando tentamos inicializar o campo diretamente, ocorre um erro indicando que o campo name
possui um 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ó podemos inicializar os campos dos objetos, mas não acessar esses campos. Vamos analisar um exemplo:
Main.java
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; } }
Conseguimos inicializar o campo name
por meio do construtor, mas ainda não podemos acessar esse campo e imprimi-lo usando System.out.println()
. Para contornar isso, podemos sobrescrever o método toString()
para que, ao chamar System.out.println(bob);
, sejam exibidas informações sobre seus campos.
Vamos analisar um exemplo:
Main.java
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.
Obrigado pelo seu feedback!