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.