Herança e o super

Utilizando o super

A palavra super é mais uma das palavras reservadas da linguagem TypeScript que tem uma forte ligação com a herança. Veja abaixo algumas características:

  • super é mais uma das palavras reservadas da linguagem;
  • A palavra super refere-se à classe mãe ou super-classe;
  • É usada nos construtores para chamada de construtores em cascata das classes mães;
  • É também usada para sobrescrita de métodos, quando deseja-se que o comportamento da classe mãe seja chamado.

Exemplo

A classe Transporte define um construtor que recebe como parâmetro a capacidade.

export class Transporte{

    protected _capacidade: number;

    public constructor(capacidade: number){
        this._capacidade = capacidade;
    }
}

A classe Terrestre não define nenhum construtor, porém herda de Transporte.

export class Terrestre extends Transporte{

    private _numRodas: number;

    public get numRodas() : number {
        return this._numRodas;
    }

}

Mesmo que Terrestre não defina um construtor, ele herda da sua classe mãe, sendo obrigado a utilizar na criação de um objeto. Vejamos um exemplo abaixo:

let transporte = new Transporte(6)

let terrestre = new Terrestre(5)

É possível a classe filha definir um construtor próprio?

Vamos utilizar o mesmo exemplo anterior. Segue, abaixo, a classe Transporte que define um construtor que recebe a capacidade como parâmetro.

export class Transporte{

    protected _capacidade: number;

    public constructor(capacidade: number){
        this._capacidade = capacidade;
    }
}

A classe Terrestre agora tem seu construtor modificado, mesmo sendo filha da classe Transporte tem um construtor diferente.

export class Terrestre extends Transporte{

    private _numRodas: number;

    public constructor(numRodas: number, capacidade: number){
        super(capacidade)
        this._numRodas = numRodas;
    }
}

O código acima ilustra um exemplo de herança, que faz uso da palavra-chave super. Vamos entender o que acontece quando usamos o comando super em tais contextos.

Primeiro, observe que o super é usado para chamar o método construtor da classe mãe. Na classe Terrestre, o super tem como parâmetro a capacidade exigida no construtor da classe Transporte. Portanto, a chamada super na classe Terrestre é no fundo a chamada ao construtor de Transporte.

Abaixo, segue o código da criação do objetos das duas classes:

let transporte = new Transporte(6)

let terrestre = new Terrestre(4,5)

O que faz o operador super?

  • Ele chamará o construtor da superclasse para que essa possa realizar as suas inicializações antes mesmo que todas as suas classes filhas;
  • Uma chamada para super() poderá ser sem parâmetros ou com parâmetros, dependendo dos argumentos especificados no construtor da superclasse.

Versão 5.3 - Todos os Direitos reservados