Si declaraste el método "depositar" como abstracto en la clase "Cuenta", significa que la implementación de dicho método debe proporcionarse en las clases hijas que heredan de la clase "Cuenta". En este caso, el método "transferir" pertenece a la clase "Cuenta" y puede invocar al método abstracto "depositar" sin problemas.
Cuando invocas "cuenta.depositar(valor)" dentro del método "transferir", estás llamando al método "depositar" de la cuenta receptora para depositar el valor transferido. Esta es una implementación común en la lógica de transferencia entre cuentas.
El hecho de que el método "depositar" esté declarado como abstracto no significa que esté vacío. Significa que no tiene una implementación en la clase "Cuenta" y debe ser implementado en las clases hijas. Por lo tanto, puedes mantener la llamada "cuenta.depositar(valor)" en tu método "transferir" sin ningún problema.
public boolean transferir(double valor, Cuenta cuenta) {
if (this.saldo >= valor) {
this.retirar(valor);
cuenta.depositar(valor);
return true;
}
return false;
}
No necesitas cambiarlo a "this.saldo += valor" porque eso modificaría directamente el saldo de la cuenta receptora sin pasar por su método "depositar". Mantener la llamada al método abstracto "depositar" asegura que se respeten las reglas y la lógica de la cuenta receptora al realizar el depósito.