Fiz várias coisas diferentes, entre elas, encapsular os atributos, permitindo acesso somente por get e set.
Quando criei a classe Cliente, a miha classe Conta tem um objeto para a classe cliente, que é instanciada no construtor. Assim ara cada conta tenho um objeto cliente distinto.
No método setCliente, que antes apenas passava uma string recebida para o atributo titular, agora chama os métodos setNome, setCpf e setProfissao da classe cliente com os argumento recebidos.
Primeiro crio o objeto conta, passando a profissao Dentista, apenas para dar o pronto que está abaixo. Depois chamo o método setCliente, passando o nome e demais dados. Em seguida crio o objeto conta2, passando a profissão Advogado e precebo que a impressão no console está ok, ou seja passou pela segunda vez no construtor da classe Conta, criando o segundo objeto Cliente.
Mas quando chamo o méoido setCliente, passando o nome Ganesh, o nome do cliente da primeira conta recebe este mesmo valor.
public class Cliente {
private static String nome;
private static String cpf;
private static String profissao;
public void setNome(String argNome) {
this.nome = argNome;
}
public void setCpf(String argCpf) {
this.cpf = argCpf;
}
public void setProfissao(String argProfissao) {
this.profissao = argProfissao;
}
public String getNome() {
return this.nome;
}
public String getCpf() {
return this.cpf;
}
public String getProfissao() {
return this.profissao;
}
}
public class Conta { private double saldo = 0; private int agencia = 0; private int numero = 0; private Cliente cliente;
Conta(String profissao) {
System.out.println(profissao);
this.cliente = new Cliente() ;
}
public void setCliente(String nome, String cpf, String profissao) {
this.cliente.setNome(nome);
this.cliente.setCpf(cpf);
this.cliente.setProfissao(profissao);
}
public void setSaldo (double argSaldo) {
this.saldo = argSaldo;
}
public void setAgencia (int argAgencia) {
this.agencia = argAgencia;
}
public void setNumero (int argNumero) {
this.numero = argNumero;
}
public double getSaldo() {
return this.saldo;
}
public int getAgencia() {
return this.agencia;
}
public int getNumero() {
return this.numero;
}
public String getTitular() {
return this.cliente.getNome();
}
public void deposita (double valor) {
this.saldo += valor;
}
public boolean saca (double valor) {
if (this.saldo >= valor) {
this.saldo -= valor;
return true;
} else {
return false;
}
}
public boolean transfere(double valor, Conta destino) {
if (this.saldo >= valor) {
this.saldo -= valor;
destino.deposita(valor);
return true;
} else {
return false;
}
}
}
public class CiraConta {
public static void main(String[] args) {
// TODO Auto-generated method stub
Conta conta = new Conta("Dentista");
conta.setSaldo(150.65);
conta.setCliente("Luiz Alberto Alano", "111.222.333-44", "Aposentado");
System.out.println(conta.getTitular());
Conta conta2 = new Conta("Advogado");
conta2.setSaldo(-20.0);
conta2.setCliente("Ganesh", "", "");
System.out.println("O um é " + conta.getTitular() + " o outo é " + conta2.getTitular());
System.out.println(conta.getTitular() + ", Seu saldo atual é " + conta.getSaldo());
conta.saca(300);
System.out.println("Sacou 300 -> " + conta.getSaldo());
conta.deposita(3000);
System.out.println("Depositou 3000 -> " + conta.getSaldo());
conta.saca(800);
System.out.println("Sacou 800 -> " + conta.getSaldo());
conta.transfere(550.65, conta2);
System.out.println("Transferiu 550.65 -> " + conta.getSaldo());
System.out.println("Na segunda conta tem -> " + conta2.getSaldo() + " para " + conta2.getTitular());
conta.transfere(5500.65, conta2);
System.out.println("Transferiu 5500.65 -> " + conta.getSaldo());
System.out.println("Na segunda conta tem -> " + conta2.getSaldo());
}
}
Saída: Dentista Advogado Luiz Alberto Alano O um é Ganesh o outo é Ganesh Ganesh, Seu saldo atual é 150.65 Sacou 300 -> 150.65 Depositou 3000 -> 3150.65 Sacou 800 -> 2350.65 Transferiu 550.65 -> 1800.0 Na segunda conta tem -> 530.65 para Ganesh Transferiu 5500.65 -> 1800.0 Na segunda conta tem -> 530.65