1
resposta

[Sugestão] Minha solução

Minha ideia foi criar 2 novas contas: ContaSalário e ContaNaoTransfere. Basicamente a Conta não transfere é igual a Conta mãe, ela apenas não possui a função de transferir. E a classe Conta salário ela herda da conta não transfere com os mesmo parâmetros da conta corrente e poupança.

1 resposta

Olá Lewy!

Parece que você está no caminho certo para resolver o desafio de criar a classe ContaSalário e a classe ContaNaoTransfere. Essa é uma boa abordagem para adicionar restrições específicas a uma conta.

A classe ContaNaoTransfere, como você mencionou, é uma extensão da classe Conta, mas não possui a função de transferir. Já a classe ContaSalário herda da ContaNaoTransfere e possui os mesmos parâmetros da ContaCorrente e da ContaPoupança.

Agora, você precisa implementar a lógica para que a ContaSalário não permita realizar transferências. Você pode fazer isso sobrescrevendo o método de transferência na classe ContaSalário e lançando uma exceção ou retornando uma mensagem de erro, informando que essa operação não é permitida.

Aqui está um exemplo de como você pode implementar isso:

class ContaNaoTransfere : Conta() {
    // Implementação da classe ContaNaoTransfere
}

class ContaSalario : ContaNaoTransfere() {
    override fun transferir(valor: Double, destino: Conta) {
        throw UnsupportedOperationException("A conta salário não permite transferências.")
    }
}

fun main() {
    val contaSalario = ContaSalario()
    val contaDestino = ContaCorrente()

    try {
        contaSalario.transferir(100.0, contaDestino)
    } catch (e: UnsupportedOperationException) {
        println(e.message)
    }
}

Neste exemplo, ao tentar realizar uma transferência a partir de uma conta salário, será lançada uma exceção indicando que essa operação não é permitida.

Espero ter ajudado e bons estudos!