Objetivos
        
    
    
    
        
Herança
    
    
        
            
                A linguagem JS permite que uma classe herde características de uma outra classe. 
                O uso de herança deve ser utilizado quando temos uma relação é-um(a). Assim, uma classe que "Filha" tem 
                acesso aos recursos da classe "Pai"(super) e também estendê-la. 
            
            
                Os de conceitos de P.O.O podem ser vistos em Conceitos O.O.
            
         
     
    
        
Herança com extends
    
    
        
            
                Para aplicar o conceito de herança em JS, utilizamos a palavra reservada 
                extends como pode ser visto na sintaxe abaixo:
            
            Sintaxe
            
class classe_pai
{
 //corpo
}
class classe_filha extends classe_pai
{
 //corpo
}
            Onde
            classe_pai: Classe pai, base ou principal
classe_filha: Classe que irá utilizar herança e extender a classe_pai.
            
                Como essa herança, a classe classe_filha tem acesso aos métodos e atributos 
                da classe classe_pai. Abaixo, um exemplo de utilização de atributo herdado 
                de uma classe pai ou super.
            
            Exemplo 1
            
class Pai{
  atributo = -1; //público
}
class Filha extends Pai {
  atributoFilha = -1;
}
let p = new Pai();
let f = new Filha();
console.log(p.atributo);
console.log(f.atributo);
            Saída
            
-1
-1
         
     
    
        
Lidando com construtores
    
    
        
            
                Uma classe Pai pode possuir um construtor com parâmetros que são vitais para sua 
                instanciação. Nessa situação, uma classe Filha precisa invocar o constructor de uma 
                classe Pai implicitamente. Para isso, utilizamos o construtor super.
            
            Sintaxe
            
class classe_filha extends classe_pai
{
    constructor(<parametros>)
    {
        super(<parametros>);
    }
}
            Onde
            classe_pai: Classe pai, base ou principal
classe_filha: Classe que irá utilizar herança e extender a classe_pai.
            Exemplo 2
            
class Pai{
  atributo;
  constructor(p){
    this.atributo = p;
  }
}
class Filha extends Pai {
  atributoFilha;
  constructor(param){
    super(param);
  }
}
            Saída
            
-
            
                Tendo os recursos de uma classe Pai iniciados corretamente, podemos acessá-los normalmente como pode 
                ser visto no exemplo abaixo:
            
            Exemplo 3
            
class Pai
{
  atributo;
  constructor(p){
    this.atributo = p;
  }
}
class Filha extends Pai 
{
  atributoFilha;
  constructor(param){
    super(param);
  }
}
let x = new Filha("teste");
console.log(x.atributo);
            Saída
            
teste
         
     
    
        
Métodos da classe super
    
    
        
            
                Assim como utilizamos a palavra reservada super para invocar o método 
                construtor de uma classe Pai. Podemos utilizar super para acessar recursos 
                dessa classe.
            
            Sintaxe
            
super.nome_metodo( <argumentos> );
            Exemplo 4
            
class Pai {
 metodo_pai(){
   console.log("metodo_pai");
 }
}
class Filha extends Pai{
 metodo_filha(){
   super.metodo_pai();
   console.log("metodo_filha");
 }
}
let x = new Filha();
x.metodo_filha();
            Saída
            
metodo_pai
metodo_filha
            
                O this e super devem ser utilizados para distinção de quais recursos das classes pai e filha
                devem ser utilizados para ter uma melhor legibilidade.
            
         
     
    
        
Aplicando polimorfismo
    
    
        
            
                Poliformismo é outro conceito de POO que permite que um mesmo método com 
                uma mesma assinatura/protótipo tenha diferentes implementações. Utilizando herança 
                de classes conseguimos implementar esse conceito. 
            
            Exemplo 5
            
class Pai {
 metodo(p1,p2){
   console.log(p1*p2);
 }
}
class Filha extends Pai{
 metodo(p1,p2){
   super.metodo(p1,p2);
   console.log(p1+p2);
 }
}
let x = new Filha();
x.metodo(1,2);
            Saída
            
2
3
            
                No exemplo acima, a classe Filha sobrescreve a implementação do método metodo da classe Pai 
                tendo seu comportamento modificado. 
            
         
     
    
        
Histórico de atualizações
    
    
        
            
                - 18/08/2025 - revisão 3 - Ajustes: pontuais, sintaxes e objetivos
 
                - 26/09/2024 - revisão 2 - Ajustes gramaticais pontuais; outros ajustes
 
                - 05/10/2023 - revisão 1 - Correção em layout, navegação, erros gramaticais
 
                - 31/05/2023 - 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.