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.