Olá, estou com uma dúvida no código abaixo. Estou usando as variáveis como privadas "#".
Eu quero que o saque da conta corrente tenha taxa, mas não quero que a transferencia da conta corrente para conta poupança tenha essa taxa.
O problema é que, o método "sacar" está na clases "Conta" e a classe "contaCorrente" usa esse método através do "super.sacar". Ou seja, mesmo que eu coloque uma taxa = 1 no método transferir da classe "Conta", esse método vai chamar o método sacar da classe "contaCorrente" que vai aplicar a taxa da conta corrente e com isso subscreve a taxa do método transferir.
Como eu faço para que funcione ? Eu já criei um método separado na classe "contaCorrente", mas não funciona para o método transferir.
Segue o código para vê se fica mais claro.
index.js
import {cliente} from "./cliente.js";
import {contaCorrente} from "./contaCorrente.js";
import {contaPoupanca} from "./contaPoupanca.js";
const cliente1 = new cliente("Joao", parseInt('08876678998'), 123123123);
const cliente2 = new cliente("Maria", parseInt('2933327763'), 65589669);
const novaContaCorrente1 = new contaCorrente(8023, cliente1);
const novaContaPoupanca1 = new contaPoupanca(8023, cliente1, 0);
const novaContaCorrente2 = new contaCorrente(8023, cliente2);
novaContaCorrente1.depositar(500);
novaContaCorrente1.sacar(100);
novaContaPoupanca1.depositar(300);
novaContaCorrente1.transferir(40, novaContaPoupanca1);
Conta.js
import {cliente} from "./cliente.js";
export class Conta{
#saldo;
#cliente;
#sacar
constructor(agencia, cliente, saldo){
this.agencia = agencia;
this.alteracliente = cliente;
this.alterasaldo = saldo;
}
set alteracliente(novoValor){
if(novoValor instanceof cliente){
this.#cliente = novoValor;
}
}
set alterasaldo(novoSaldo){
this.#saldo = novoSaldo;
}
get cliente(){
return this.#cliente;
}
get saldo(){
return this.#saldo;
}
sacar(valor, taxa){
valor *= taxa;
console.log("Fui chamado - Conta")
if(this.#saldo >= valor){
this.#saldo -= valor;
return valor;
}
return 0;
}
depositar(valor){
if(valor <= 0){
return;
}
this.#saldo += valor;
}
transferir(valor, conta){
let taxa = 1;
const valorSacado = this.sacar(valor, taxa);
conta.depositar(valorSacado);
}
}
contaCorrente.js
import { Conta } from "./Conta.js";
export class contaCorrente extends Conta{
static numeroDeContas = 0;
constructor(agencia, cliente){
super(agencia, cliente, 0);
contaCorrente.numeroDeContas += 1;
}
//Só funciona se for chamado diretamente.
/*sacarContaCorrente(valor){
let taxa = 1.1;
return super.sacar(valor, taxa);
}*/
// Funciona com o método transferir da classe Conta
sacar(valor){
let taxa = 1.1;
return super.sacar(valor, taxa);
}
}