Olá, segue a minha ideia de implementação:
Alterei o método transfere na classe Conta (mãe):
public boolean transfere(double valor, Conta contaDestino) {
if (this.saldo >= valor) {
System.out.println("-------------------------------------------------------");
System.out.println("*******************************************************");
System.out.println("Iniciando transferencia ...");
this.saca(valor);
if(contaDestino instanceof ContaPoupanca && this instanceof ContaCorrente) { /*Verifica se contaDestino é do tipo ContaPoupança e também se o objeto que está chamando o método trasfere() é do tipo contaCorrente. Quem está ajudando é o operador instanceof*/
contaDestino.deposita(valor + 10.0);
System.out.println("Conta poupança adicionar mais R$10");
System.out.println("-------------------------------------------------------");
System.out.println("Transferencia realizada com sucesso");
System.out.println("-------------------------------------------------------");
System.out.println("*******************************************************");
return true;
}
contaDestino.deposita(valor);
System.out.println("Transferencia realizada com sucesso");
System.out.println("-------------------------------------------------------");
System.out.println("*******************************************************");
return true;
}
System.out.println("Saldo insuficiente");
System.out.println("-------------------------------------------------------");
System.out.println("*******************************************************");
return false;
}
As classes filhas, ContaCorrente e ContaPoupança, não foram mexidas.
Testando a nova implementação:
public class TesteConta {
public static void main(String[] args) {
ContaCorrente cc = new ContaCorrente(111, 333);
cc.deposita(100.0);
ContaCorrente cc2 = new ContaCorrente(111, 222);
cc2.deposita(100.0);
ContaPoupanca cp = new ContaPoupanca(222, 222);
cp.deposita(100.0);
cc.transfere(10.0, cp);
cc.transfere(10.0, cc2);
System.out.println("CC: " + cc.getSaldo());
System.out.println("CC2: " + cc2.getSaldo());
System.out.println("CP: " + cp.getSaldo());
}
}
Resultado do console:
Estou criando uma conta
Depósito realizado com sucesso
-------------------------------------------------------
Estou criando uma conta
Depósito realizado com sucesso
-------------------------------------------------------
Estou criando uma conta
Depósito realizado com sucesso
-------------------------------------------------------
-------------------------------------------------------
*******************************************************
Iniciando transferencia ...
Saque realizado com sucesso
-------------------------------------------------------
Depósito realizado com sucesso
-------------------------------------------------------
Conta poupança adicionar mais R$10
-------------------------------------------------------
Transferencia realizada com sucesso
-------------------------------------------------------
*******************************************************
-------------------------------------------------------
*******************************************************
Iniciando transferencia ...
Saque realizado com sucesso
-------------------------------------------------------
Depósito realizado com sucesso
-------------------------------------------------------
Transferencia realizada com sucesso
-------------------------------------------------------
*******************************************************
CC: 179.6
CC2: 210.0
CP: 220.0