Leitura recomendada
Objetivos
Classe Abstrata
Outra forma, além do uso de interface, de aplicar a abstração utilizando a linguagem
TS, é com auxiliar de classes abstratas.
Interfaces não possuem implementação, em contrapartida classes concretas possuem
implementação. Uma classe abstrata é a junção das características
de interface e classe concreta permitindo ter métodos implementados
e também me todos abstratos.
Características:
- Possui métodos concretos
- Possui atributos abstratos
- Possui construtor
- Não pode ser instanciada
A declaração de uma classe abstrata é feita utilizando a sintaxe abaixo que utiliza
a palavra reservada abstract para informar que uma classe é abstrata.
Sintaxe
abstract class nome_classe {
//corpo
}
Declarando método abstrato
O corpo de uma classe abstrata pode conter protótipos/assinatura dos métodos
abstratos e também métodos concretos com implementação.
Sintaxe
abstract nome_metodo(&llista_parametros>): tipo_retorno;
Exemplo 1
abstract class nome_classe_abstrata {
constructor(){} //opcional
abstract metodo(p:number): number;
}
Saída
-
Os métodos que não possuem implementação são chamados de métodos abstratos.
Esses também são usados em classes abstratas que serão vistas mais adiante.
Os métodos concretos de uma classe abstrata são métodos de classe comuns que já
foram vistos em Métodos que possuem
características semelhantes as funções estudas em
Funções.
Herança de classe abstrata
Para que seja possível o uso de uma classe abstrata, precisamos criar uma classe e informar que
um determinada classe abstrata será herdada. Isso é feito utilizando a palavra reservada extends.
Sintaxe
class nome_classe extends classe_abstrata {
//corpo
}
Exemplo 2
abstract class nome_classe_abstrata {
constructor(){}
abstract metodo(p:number): number;
}
class minha_classe extends nome_classe_abstrata{
//corpo
}
Saída
-
Implementando métodos abstratos
A implementação dos métodos de uma classe abstrata é feita normalmente como
quaisquer métodos já utilizados em exemplos anteriores.
Os nomes dos parâmetros utilizados pelos métodos implementados não precisam
necessariamente coincidir com os nomes declarados na assinatura dos métodos, porém,
devem seguir os mesmos tipos de dados e tipo de retorno.
Exemplo 3
abstract class nome_classe_abstrata {
//constructor(){}
abstract metodo(p:number): number;
//métodos concretos omitidos
}
class minha_classe extends nome_classe_abstrata{
//corpo
public metodo(p:number):number {
return p*2;
}
}
let mc = new minha_classe();
console.log(mc.metodo(2));
Saída
4
Os modificadores de acesso vistos anteriormente podem ser utilizados no momento
da implementação sendo necessário a verificação da necessidade para cada modificador.
A linguagem TS permite o uso de herança múltipla de classes abstratas e interfaces.
A herança múltipla é possível utilizando as palavras reservadas extends e
implements.
Sintaxe
class nome_classe extends classe_abstrata implements nome_interface ){
//corpo
}
Exemplo 5
abstract class nome_classe_abstrata {
//constructor(){}
abstract metodo1(p:number): number;
}
interface nome_interface {
metodo2(p:number): number;
}
class minha_classe extends nome_classe_abstrata implements nome_interface {
//corpo
public metodo1(p:number):number {
return p*2;
}
public metodo2(p:number):number {
return p*3;
}
}
Saída
-
Histórico de atualizações
- 28/08/2025 - revisão 2 - Ajustes: pontuais, objetivos e sintaxes
- 13/09/2024 - revisão 1 - correção em link 'Anterior', ajustes gramaticais e pequenas melhorias
- 29/02/2024 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.