Olá Rubi, tudo bem com você?
Muito legal a sua solução! De forma alguma é uma má prática, é considerado inclusive uma boa prática, pois aumenta o nível de abstração do código e já utiliza as verificações dos próprios métodos saque()
e deposito()
para verificar se a transferência pode ser feita ou não! É uma solução bastante elegante, pois reaproveita código, tornando desnecessário fazer a mesma verificação em dois lugares diferentes, e aumenta a legibilidade do código!
Tem apenas uma ressalva: o código transferencia vai funcionar perfeitamente, enquanto o comportamento de saque e deposito forem exatamente esses. Em casos que esses comportamentos podem mudar, talvez seja interessante fazer a lógica do método transferencia dentro do próprio método, pois caso sejam adicionadas novas regras de négocio que afetem, por exemplo, o saque, e não a transferência, da maneira que o código está, acabaria afetando a transação de transferência também!
No entanto, caso seja certo de que essas regras de negócio permanecerão as mesmas, é uma solução bastante interessante!
Um grande abraço e bons estudos!