Herança

As classes JavaScript suportam o recurso herança, característica comum na orientação a objetos onde uma classe pode herdar comportamentos e características de outra classe.

No exemplo abaixo temos a classe Juridico utilizando o recurso herança para herdar os comportamentos da classe Pessoa.

class Juridico extends Pessoa {
    /**
    * sobrescreve o método cpfIsValid da classe Pessoa
    */
    cpfIsValid () {
        throw new Error('Esté método não pode ser acessado a partir desta classe')
    }

    /**
    * verifica se um número de cnpj é valido.
    * @param
    * @return
    */
    cnpjIsValid (value) {
        // gera um erro se estiver sendo passado um número de cpf
        if (super.cpfIsValid(value)) {
            throw new Error('Número de CPF não é aceito')
        }
        ...
    }
}

Na linha 1 foi utilizada a palavra extends e em seguida o nome da classe pai. Isso faz com que todos os recursos da classe Pessoa possam ser utilizados pela classe Juridico.

Na linha 16 é utilizado o método cpfIsValid precedido pela palavra super ao invés do this, isso significa que ele está acessando o método definido na classe pai, ignorando o método sobrescrito na própria classe que retorna uma exceção.

Métodos estáticos

Podemos definir em uma classe métodos estáticos que podem ser executados sem que a mesma tenha sido instanciada. Geralmente este recurso é utilizado para criar funções de utilidades.

No exemplo abaixo temos a classe Pessoa que possuí o método estático cpfIsValid, que valida se o número de cpf informado é valido.

/**
* Entidade responsável por armazenar informações de uma pessoa física
*/
class Pessoa {
    /**
    * verifica se um número de CPF é valido
    *
    * @param value numero de cpf
    * @returns
    */
    static cpfIsValid (value) {
        return /^\d\.\d\.\d\-\d$/.test(value)
    }
}

console.log(Pessoa.cpfIsValid('999.999.999-99'))
// true

Na linha 11 é utilizada a palavra reservada static e em seguida o método e definido normalmente.

Na linha 16 o método cpfIsValid é utilizado sem a necessidade de instanciar a classe.

Confira também