abstract class Classes abstratas

Última atualização: 2026-10-22

abstract class Classes abstratas

Uma classe abstrata é uma classe base pela metade: pode carregar implementação real e, ao mesmo tempo, declarar membros abstratos (abstract area(): number) que as subclasses devem completar. Não pode ser instanciada diretamente, apenas estendida — ideal para "subclasses compartilham o esqueleto, mas donas dos detalhes".

GrupoFunções e Classes
TipoSintaxe
Modo strictNão necessário

ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.

📝 Sintaxe

abstract class Shape {
  constructor(protected name: string) {}

  abstract area(): number;          // método abstrato: apenas a assinatura

  describe(): string {              // método concreto: herdado como está
    return `${this.name}: ${this.area().toFixed(2)}`;
  }
}

class Circle extends Shape {
  constructor(private radius: number) { super("circle"); }
  area(): number { return Math.PI * this.radius ** 2; }
}

⚙️ Parâmetros

abstract classClasse abstrata: não pode receber new, apenas ser estendida
abstract area(): numberMembro abstrato: apenas assinatura; as subclasses devem implementá-lo ou o compilador reporta erro
protectedFrequentemente em par com classes abstratas: estado como name destinado às subclasses

Retorno:Métodos abstratos declaram apenas assinaturas; métodos concretos recebem tipos de retorno normais. Nenhuma instância abstrata existe em execução — todo objeto é uma instância de subclasse.

▶ Exemplo

Edite o código abaixo e clique em Testar para ver o resultado transpilado:

Saída:

circle: 3.14
square: 4.00

(Saída de execução após a transpilação; new Shape("x") gera o erro de compilação TS2511 — mesmo que o JS emitido seja só uma classe comum)

💡 Observações

ℹ️ Info A abstração também é de tempo de compilação: o tsc proíbe new Shape(), mas o JS emitido é uma classe comum e o new funcionaria em execução — é um guard rail, não um muro.
💡 Dica Classe abstrata vs interface: classes abstratas carregam estado e implementação (o coração do padrão template-method); interfaces descrevem apenas formas. Compartilhar código → classe abstrata; restringir forma → interface. Pode usar ambos juntos.
⚠️ Atenção Uma classe só pode estender uma base; para múltiplas capacidades use interfaces mais composição, em vez de forçar uma única cadeia de herança.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P O que acontece ao dar new numa classe abstrata?
R Erro de compilação TS2511 (não é possível criar uma instância de classe abstrata). O JS emitido é uma classe comum e o new funcionaria em execução — nunca dependa de proteção em tempo de execução.
P Uma classe abstrata pode ter construtor?
R Sim, geralmente combinado com protected: um construtor protected também bloqueia o new externo (subclasses ainda podem chamar super) — outra forma de proibir instanciação direta.
P Classe abstrata ou interface?
R Compartilhar implementação/estado (um método describe, um campo name) → classe abstrata; contrato puro, implementável várias vezes → interface. Combinação comum: interface para o contrato público, classe abstrata para a implementação padrão.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%