Olá Sung Ju No, tudo bom?
O que você falou faz total sentido =)
No curso ele fez o "copiar e colar" para poder mostrar que as duas classes podem ter métodos semelhantes, é possível sim usar o super
(ou um outro método) para minimizar o código copiado (ele inclusive faz isso, só não lembro se era nesse mesmo curso ou no curso seguinte).
Mas dando um pequeno spoiler, podemos pegar o código do método sacar
e migrar ele para um outro método (apenas para separa essa regra de negócio, sem precisar copiar ele para as outras classes). E depois podemos deixar esse método sacar
com menos código, que pode ser usado nas demais classes. Como no exemplo abaixo:
// Classe Conta
sacar(valor) {
let taxa = 1;
return this._sacar(valor, taxa)
}
_sacar(valor, taxa) {
const valorSacado = taxa * valor;
if (this._saldo >= valorSacado) {
this._saldo -= valorSacado;
return valorSacado;
}
return 0;
}
Toda a nossa regra está no método _sacar
(que só existe na classe Conta
). Já o método sacar
é quem vai informar a taxa e chamar o _sacar
. Nas demais classes podemos fazer assim:
// classe ContaCorrente
sacar(valor) {
let taxa = 1.1;
return this._sacar(valor, taxa)
}
Repare que na classe ContaCorrente eu só trouxe o método sacar
. Nele eu informo uma outra taxa, e logo em seguida eu uso o método _sacar
da minha classe pai (a Conta). Assim eu não replico a regra de negócio inteira =)
Espero ter ajudado, e qualquer duvida é só chamar!