3
Well, I have this class with the attributes private
class Conta {
int numero; // Atributo
private double saldo;
Cliente user = new Cliente();
private double limite; }
From what I understood of the private modifier I should only be able to change the balance and the limit through the class, with a method, but this does not occur here:
conta minhaConta = new conta();
minhaConta.user.nome = "Marcelo Dos Santos";
minhaConta.user.cpf = "12F";
minhaConta.numero = 123;
minhaConta.saldo = 1000; // Define o saldo
minhaConta.limite = 1000;
minhaConta.deposita(100);
minhaConta.saca(0);
minhaConta.saldo = 10; // Altera o saldo fora da classe mesmo com private
System.out.println(minhaConta.saldo); // Retorna 10 e não 1000
Why does this happen?
Complete code:
public class ExerciciosConta {
public static void main(String[] args) {
class Cliente {
String cpf;
String nome;
}
class conta {
int numero; // Atributo
private double saldo;
Cliente user = new Cliente();
private double limite;
void saca (double quantidade) {
if(quantidade <= this.saldo) {
this.saldo -= quantidade;
System.out.println("R$" + quantidade + " retirados com sucesso! Seu saldo atual é de: R$ " + this.saldo);
} else {
System.out.println("Sem saldo suficiente para o saque.");
}
}
void deposita(double quantidade) {
if(this.saldo + quantidade <= this.limite) {
this.saldo += quantidade;
System.out.println("R$" + quantidade + " depositados com sucesso! Seu saldo atual é de: R$ " + this.saldo);
}else {
System.out.println("Você não pode depositar esta quantidade de dinheiro, pois irá atingir o limite da conta. Você pode depositar R$" + (this.limite - this.saldo));
}
}
boolean transfere(conta destino, double valor) {
if(this.saldo >= valor) {
this.saldo -= valor;
destino.saldo += valor;
System.out.println("Transferência de R$" + valor + " realizada com sucesso! Seu saldo atual é de: R$ " + this.saldo);
return true;
} else {
System.out.println("Seu saldo é de: R$ " + this.saldo + ". Você não tem saldo para essa transferência!");
return false;
}
}
}
Cliente clienteUm = new Cliente();
clienteUm.nome = "Marcelo dos Santos Cardoso";
clienteUm.cpf = "12F";
Cliente clienteDois = new Cliente();
clienteDois.nome = "Marcio de Sá";
clienteDois.cpf = "13F";
conta minhaConta = new conta();
minhaConta.user.nome = "Marcelo Dos Santos";
minhaConta.user.cpf = "12F";
minhaConta.numero = 123;
minhaConta.saldo = 1000; // Define o saldo
minhaConta.limite = 1000;
minhaConta.deposita(100);
minhaConta.saca(0);
minhaConta.saldo = 10; // Altera o saldo de fora da classe
System.out.println(minhaConta.saldo); // Retorna 10 e não 1000
conta contaDoOutro = new conta();
contaDoOutro.user.nome = "Marcio De Sá";
contaDoOutro.user.cpf = "13F";
contaDoOutro.saldo = 2000;
contaDoOutro.numero = 132;
contaDoOutro.limite = 5000;
contaDoOutro.transfere(minhaConta, 3000);
System.out.println(minhaConta.user.cpf);
}
}