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

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; } }

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

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

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

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; } }

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

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