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!