Considere a seguinte definição de classe:
public class Produto {
private String nome;
private double preco;
public Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}
public String getNome() {
return nome;
}
public double getPreco() {
return preco;
}
}
O que acontece se você tentar acessar o atributo nome diretamente em um objeto dessa classe fora da classe Produto?
d) Nenhuma das opçōes acima.
public class Produto {
private String nome;
private double preco;
public Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}
public String getNome() {
return nome;
}
public double getPreco() {
return preco;
}
}
O que acontece se você tentar acessar o atributo nome diretamente em um objeto dessa classe fora da classe Produto?
d) Nenhuma das opçōes acima.
Passo 1
Beleza, vamos resumir o que o enunciado pede e o que vamos usar.
Você tem uma classe Java chamada
Você tem uma classe Java chamada
Produto
que declara dois atributos:private String nome;
private double preco;
O construtor e os getters estão lá, mas o ponto é: esses atributos são
Matéria: encapsulamento em Java e modificadores de acesso (public, private, protected).
O que precisamos saber:
private
.Matéria: encapsulamento em Java e modificadores de acesso (public, private, protected).
O que precisamos saber:
- O que significa um atributo ser
private
. - O que acontece quando tentamos usar esse atributo fora da própria classe.
Passo 2
O modificador
Se você tiver, por exemplo:
private
em Java faz com que aquele membro (atributo ou método) só seja acessível de dentro da mesma classe onde ele é declarado.Se você tiver, por exemplo:
Produto p = new Produto("Caneta", 2.50);
System.out.println(p.nome);
esse
p.nome
está tentando pegar o campo nome
diretamente, e não há permissão pra isso porque nome
é private
.Passo 3
Quando o compilador Java vê
A mensagem típica de erro é algo como:
p.nome
fora da classe Produto
, ele reclama que não encontra visibilidade.A mensagem típica de erro é algo como:
nome has private access in Produto
Resposta
Você vai receber um erro de compilação, pois o atributo
nome
é private
e não pode ser acessado diretamente fora da classe Produto
.