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?
b) Irà gerar um erro de compilaçăo, pois o atributo nome é privado.
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?
b) Irà gerar um erro de compilaçăo, pois o atributo nome é privado.
Passo 1
Beleza, bora lá! A questão tá falando de uma classe Java chamada
Produto
que tem dois atributos privados: nome
e preco
. Ela tem só um construtor e dois métodos getters. O que a gente quer saber é: “E se eu tentar fazer algo como meuProduto.nome
lá fora da classe, o que acontece?” Então o conteúdo aqui é Programação Orientada a Objetos em Java, mais especificamente modificadores de acesso (encapsulamento). Vamos precisar entender o que significa private
e como o compilador Java trata isso.Passo 2
Teoria rápida: em Java, quando você declara um atributo como
private String nome;
você está dizendo que só o código dentro da própria classe
Produto
pode usar nome
. Isso é parte do encapsulamento, que serve pra proteger o estado do objeto e forçar o uso de getters/setters pra ler ou alterar valores. Se você, em outra classe, tentar fazer algumProduto.nome
, o compilador Java vai barrar isso em tempo de compilação.Passo 3
Vamos simular:
Produto p = new Produto("Caneca", 25.0);
String n = p.nome; // <--- aqui o bicho pega
Quando você mandar compilar, vai rolar um erro tipo:
error: nome has private access in Produto
String n = p.nome;
^
Isso significa que o compilador não deixa você “furar” o encapsulamento.
Resposta
Vai gerar um erro de compilação, dizendo algo como “
nome has private access in Produto
”, porque o atributo nome
foi definido como private
e não pode ser acessado diretamente de fora da classe.