JavaScript | Herança básica



This content originally appeared on DEV Community and was authored by Jose Juarez Junior

Digamos que tenhamos a seguinte classe, para criar um carro:

class Carro {
    constructor(marca, modelo) {
        this.marca = marca;
        this.modelo = modelo;
    }

    desligar() {
        return 'Carro desligou';
    }

    acelerar() {
        return 'Indo de 0 a 100 km/h em 10 segundos';
    }
}

Digamos que agora eu queira criar um outro tipo de carro. Um carro semelhante, mas que tenha o método “acelerar”, com outra implementação:

class CarroVeloz {
    constructor(marca, modelo) {
        this.marca = marca;
        this.modelo = modelo;
    }

    desligar() {
        return 'Carro desligou';
    }

    acelerar() {
        return 'Indo de 0 a 100 km/h em 5 segundos';
    }
}

Veja que repetimos as classes, porém a única diferença entre elas, é o método “acelerar”. Isso é totalmente válido para a linguagem. Porém é uma má prática. Se tivéssemos várias outras variações de carro, deveríamos ter consistência entre elas. Digamos que em uma mudança de regra de negócio, todos os tipos de carro deveriam receber como parâmetro de entrada, o ano. Teríamos que entrar em todas classes que são um tipo de Carro e adicionar esse parâmetro de entrada. É nesse cenário que temos a herança. Na herança, fazemos uma classe herdar propriedades e métodos de outra.
Assim aplicamos a herança em JavaScript:

class CarroVeloz extends Carro {
    acelerar() {
        return 'Indo de 0 a 100 km/h em 5 segundos';
    }
}

A herança é aplicada na classe que está recebendo a herença, para isso é usada a palavra-chave “extends” seguida do nome da Classe pai.
Veja que agora a classe “CarroVeloz” tem somente o método “acelerar”, pois está sobrescrevendo ele, ou seja, tendo sua própria implementação. Porém através da herança, tem as propriedades “marca” e “modelo”, além do método “desligar”.


This content originally appeared on DEV Community and was authored by Jose Juarez Junior