Eu fiz a implementação da conta salário, assim como ensinado, acabei criando uma classe abstrata de conta para manter o compartamento de transferência e as contas corrente e poupança herdaram dela.
Porém, ao trabalhar com a conta salário, não sei se foi uma má conduta da minha parte, mas optei por implementar uma interface com o comportamento transferência, porem não implementado. A conta salário chama a interface para implementar o metodo sobrescrevendoo, porém apresentando uma resposta negativa, informando que áquela conta não pode realizar transferências.
interface Transferivel {
fun transferencia(valor: Double, destino: Conta) :Boolean
}
abstract class ContaTransferivel(
titular: String,
numero: Int
) : Conta(
titular = titular,
numero = numero
), Transferivel {
override fun transferencia(valor: Double, destino: Conta): Boolean {
if (this.saldo >= valor) {
this.saldo -= valor
destino.deposita(valor)
return true
} else {
return false
}
}
}
class ContaCorrente(
titular: String,
numero: Int
) : ContaTransferivel(
titular = titular,
numero = numero
) {
override fun saque(valor: Double) {
val valorComTaxa = valor + 0.1
if(this.saldo >= valorComTaxa) {
this.saldo -= valorComTaxa
}
}
}
class ContaPoupanca(
titular: String,
numero: Int
) : ContaTransferivel(
titular = titular,
numero = numero
) {
override fun saque(valor: Double) {
if (this.saldo >= valor) {
this.saldo -= valor
}
}
}
class ContaSalario(
titular: String,
numero: Int
) : Conta(
titular = titular,
numero = numero
), Transferivel {
override fun saque(valor: Double) {
if (this.saldo >= valor) {
this.saldo -= valor
}
}
override fun transferencia(valor: Double, destino: Conta): Boolean {
println("Nào é possível transferir desta conta")
return true
}
}
De antemão, fico grato pela atenção e por eventuais considerações.