Leitura recomendada
    
    
    
        
Objetivos
        
    
    
    
        
Herança
    
    
        
            
                Outro conceito de O.O que vamos aplicar na linguagem TS é o conceito de herança, 
                que pode ser resumido como um relacionamento é-um em que uma classe herda 
                características de uma classe pai podendo utilizar os recursos dessa classe 
                e também estendê-la.
            
            
                A sintaxe para a utilização de herança entre classes na Linguagem TS é feita da 
                forma simples como mostrado abaixo utilizando a palavra reservada extends:
            
            Sintaxe
            
<modificador_acesso> class classe_filha extends classe_pai
{
  //corpo
}
            Onde
            extends: Palavra reservada para definir o uso de herança
            
                Não há diferença na instanciação de um objeto utilizando uma classe que usa o 
                conceito de herança, a palavra reservada new é utiliza da mesma forma. 
            
            
                Os termos Pai e Filha acima serão utilizados ao longo deste trecho 
                do tutorial em que vamos estudar a herança entre classes para facilitar a compreensão.
            
            Exemplo 1
            
class classe_pai
{
    //corpo
}
class classe_filha extends classe_pai
{
    //corpo
}
            Saída
            
-
         
     
    
        Método Construtor e Herança
        
     
    
        
            
                Os métodos construtores tipo padrão, sem parâmetros, são chamados implicitamente 
                quando instanciamos um objeto da classe Filha que utiliza herança. 
            
            Exemplo 2 
            
class classe_pai
{
    //corpo
}
class classe_filha extends classe_pai
{
    //corpo
}
let pai = new classe_pai();
let filha = new classe_filha();
            Saída
            
-
            
                Ao ser chamado o construtor padrão da classe Filha, o construtor da classe Pai é 
                chamado implicitamente sem a necessidade codificação. Porém, caso seja 
                necessário iniciar a classe pai com valores, o construtor super da classe 
                Pai é chamado ou invocado explicitamente.
            
            Exemplo 3 
            
class classe_pai
{
    atributo:number = 0;
    //corpo omitido
    constructor(p:number)
    {
        this.atributo = p;
    }
}
class classe_filha extends classe_pai
{
    atributo2:number = 0;
    constructor(p:number,q:number){
        super(p) //chamando construtor da classe pai
    }
    //corpo omitido
}
let filha = new classe_filha(1,2);
            Saída
            
-
         
     
    
    
        
            
                Com o uso de herança vamos aprender um novo modificador de acesso chamado 
                protected. Esse modificador permite que o acesso aos atributos é métodos de 
                uma classe Pai seja feita apenas por suas classes filhas. 
            
            Sintaxe
            
modificador_acesso class <class_pai>
{
    protected atributo: number;
     //omitido
}
            
                Para que a classe Filha tenha acesso aos atributos de sua classe Pai, 
                precisamos utilizar a palavra reservada this ou super em conjunto com 
                o operador de acesso (.). Esse acesso deve ser feito dentro de um método.
            
            Exemplo 4
            
class classe_pai
{
    protected atributo:number = 0;
    //corpo omitido
    protected metodo1():void
    {
        console.log("metodo");
    }
}
class classe_filha extends classe_pai
{
    public metodo2(){
        this.metodo1();
        console.log(this.atributo); //recurso protected
    }
}
let filha = new classe_filha();
//filha.metodo1(); //método protected acessado apenas por classes filhas
filha.metodo2();
//console.log(filha.atributo); //atributo protected acessado apenas por classes filhas
            Saída
            
"metodo" 
0
         
     
    
    
        
            
               O acesso aos métodos da classe Pai, de acordo com os seus modificadores utilizados, 
                pode ser feito utilizando a palavra reservada super como pode ser visto na
                sintaxe abaixo:
            
            Sintaxe
            
super.nome_metodo(<lista_argumentos>);
            Exemplo 5
            
class classe_pai
{
    protected metodo1():void
    {
        console.log("metodo1");
    }
}
class classe_filha extends classe_pai
{
    public metodo2(){
        super.metodo1();
        console.log("metodo2");
    }
}
let filha = new classe_filha();
filha.metodo2();
            Saída
            
"metodo1" 
"metodo2"
         
     
    
    
        
            
                Polimorfismo consiste em uma classe Filha alterar a implementação de um 
                método de sua classe Pai. Dessa forma, uma classe Filha pode utilizar uma mesma 
                assinatura de método com comportamento diferente.
            
            
                A sobrescrita do método pode ser indicada por override na declaração do 
                método sobreescrito como pode ser visto na sintaxe abaixo:
            
            Sintaxe
            
modificador_acesso override nome_metodo(<lista_parametros>): tipo_retorno
{
  //corpo
}
            Exemplo 6
            
class classe_pai
{
    public metodo1():void
    {
        console.log("pai: metodo1");
        this.metodo2();
    }
    protected metodo2(){
        console.log("pai:metodo2")
    }
}
class classe_filha extends classe_pai
{
    public override metodo2(){
        console.log("filha: metodo2");
    }
}
let pai = new classe_pai();
pai.metodo1();
let filha = new classe_filha();
filha.metodo1();
            Saída
            
pai: metodo1
pai:metodo2
pai: metodo1
filha: metodo2
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 28/08/2025 - revisão 3 - Ajustes: pontuais, sintaxes, target de links 
 
                - 13/09/2024 - revisão 2 - Correção em sintaxe 'modificador protected', ajustes gerais 
 
                - 02/09/2024 - revisão 1 - Correção em link de objetivo: Construtores e herança
 
                - 01/03/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.