DEV Community

Jose Juarez Junior
Jose Juarez Junior

Posted on

JavaScript | Herança básica

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';
    }
}
Enter fullscreen mode Exit fullscreen mode

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';
    }
}
Enter fullscreen mode Exit fullscreen mode

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';
    }
}
Enter fullscreen mode Exit fullscreen mode

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".

Top comments (0)