1
resposta

Erro na classe abstrata

//classe abstrata export class Conta { constructor (saldoInicial, cliente, agencia) { if(this.constructor == Conta){ throw new Error("Você nao deveria instanciar um objeto Conta, pois essa é uma classe abstrata") } this.saldo = saldoInicial; this.cliente = cliente; this._agencia = agencia; console.log(this.constructor)

}

set cliente(novoValor) {
    if (novoValor instanceof Cliente) {
        this._cliente = novoValor;
    }
}
get cliente() {
    return this._cliente;
}

get saldo(){
    return this._saldo;
}
// Método abstrato

sacar(valor){
    throw new Error("O método Sacaar de conta é adstrato")
}

_sacar(valor, taxa){
    const valorSacado = taxa * valor;
    if(this._saldo >=valorSacado){
    this._saldo -= valorSacado;
    return valorSacado;
    }
    return 0;
}

depositar(valor){

    this._saldo += valor;

}
transferir(valor, conta){
    const valorSacado = this.sacar(valor);
    conta.depositar(valorSacado)

    }
}

meu codigo e meu erro PowerShell 7.2.1 Copyright (c) Microsoft Corporation.

https://aka.ms/powershell Type 'help' to get help.

PS C:\Users\conta\bin-dicas> node index.js [class ContaCorrente extends Conta] { numeroDeContas: 0 } [class ContaCorrente extends Conta] { numeroDeContas: 1 } [class ContaPoupanca extends Conta] file:///C:/Users/conta/bin-dicas/contas.js:5 throw new Error("Você nao deveria instanciar um objeto Conta, pois essa é uma classe abstrata") ^

Error: Você nao deveria instanciar um objeto Conta, pois essa é uma classe abstrata at new Conta (file:///C:/Users/conta/bin-dicas/contas.js:5:19) at file:///C:/Users/conta/bin-dicas/index.js:16:15 at ModuleJob.run (node:internal/modules/esm/module_job:195:25) at async Promise.all (index 0) at async ESMLoader.import (node:internal/modules/esm/loader:337:24) at async loadESM (node:internal/process/esm_loader:88:5) at async handleMainPromise (node:internal/modules/run_main:65:12)

Node.js v17.3.0 PS C:\Users\conta\bin-dicas> node index.js [class ContaCorrente extends Conta] { numeroDeContas: 0 } [class ContaCorrente extends Conta] { numeroDeContas: 1 } [class ContaPoupanca extends Conta] file:///C:/Users/conta/bin-dicas/contas.js:5 throw new Error("Você nao deveria instanciar um objeto Conta, pois essa é uma classe abstrata") ^

Error: Você nao deveria instanciar um objeto Conta, pois essa é uma classe abstrata at new Conta (file:///C:/Users/conta/bin-dicas/contas.js:5:19) at file:///C:/Users/conta/bin-dicas/index.js:16:15 at ModuleJob.run (node:internal/modules/esm/module_job:195:25) at async Promise.all (index 0) at async ESMLoader.import (node:internal/modules/esm/loader:337:24) at async loadESM (node:internal/process/esm_loader:88:5) at async handleMainPromise (node:internal/modules/run_main:65:12)

Node.js v17.3.0 PS C:\Users\conta\bin-dicas> node index.js [class ContaCorrente extends Conta] { numeroDeContas: 0 } [class ContaCorrente extends Conta] { numeroDeContas: 1 } [class ContaPoupanca extends Conta] file:///C:/Users/conta/bin-dicas/contas.js:5 throw new Error("Você nao deveria instanciar um objeto Conta, pois essa é uma classe abstrata") ^

Error: Você nao deveria instanciar um objeto Conta, pois essa é uma classe abstrata at new Conta (file:///C:/Users/conta/bin-dicas/contas.js:5:19) at file:///C:/Users/conta/bin-dicas/index.js:16:15 at ModuleJob.run (node:internal/modules/esm/module_job:195:25) at async Promise.all (index 0) at async ESMLoader.import (node:internal/modules/esm/loader:337:24) at async loadESM (node:internal/process/esm_loader:88:5) at async handleMainPromise (node:internal/modules/run_main:65:12)

Node.js v17.3.0 PS C:\Users\conta\bin-dicas>

1 resposta

Olá Marcos, tudo bem?

Desculpe a demora em retornar.

Pelo que entendi, você está tendo um erro ao tentar instanciar um objeto da classe abstrata Conta. Isso acontece porque uma classe abstrata não pode ser instanciada diretamente, ela serve apenas como base para outras classes que a estendem.

No seu código, você está lançando um erro caso alguém tente instanciar um objeto da classe Conta diretamente. Isso é correto, mas você precisa criar outras classes que estendam a classe Conta e instanciá-las ao invés da classe Conta diretamente.

Por exemplo, você pode criar as classes ContaCorrente e ContaPoupanca que estendem a classe Conta e instanciá-las no lugar da classe Conta.

Um abraço e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software