• Conceitos de P.O.O

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:
  1. Possui métodos concretos
  2. Possui atributos abstratos
  3. Possui construtor
  4. 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
}

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.

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
-

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
-
  1. 28/08/2025 - revisão 2 - Ajustes: pontuais, objetivos e sintaxes
  2. 13/09/2024 - revisão 1 - correção em link 'Anterior', ajustes gramaticais e pequenas melhorias
  3. 29/02/2024 - versão inicial