Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Criando os objetos de outra forma,não deu certo

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

1 resposta
solução!

Deu certo. Tirei o static dos atributos do Cliente.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software